Property and Event Exposure
You can create a component in Visual J# that exposes properties and events, and then write a program in another language, such as Visual Basic, to consume this component.
Example
The following is the J# code to create a component that can be consumed by other languages.
// vjc_container.jsl
// compile with: /target:library
import System.Collections.ArrayList;
/** @delegate */
public delegate void ValueChanged();
public class Container
{
private ArrayList al = new ArrayList();
// Read-only property Count
/** @property */
public int get_Count()
{
return al.get_Count();
}
/** @property */
public void set_Value(int i, System.String val)
{
al.Insert(i, val);
if (ev != null)
{
ev.Invoke(); // Raise event.
}
}
/** @property */
public System.String get_Value(int i)
{
return (System.String) al.get_Item(i);
}
public ValueChanged ev = null;
/** @event */
public void add_Event(ValueChanged p)
{
ev = (ValueChanged) System.Delegate.Combine(ev, p);
}
/** @event */
public void remove_Event(ValueChanged p)
{
ev = (ValueChanged) System.Delegate.Remove(ev, p);
}
}
The following is a Visual Basic client that consumes the properties and sinks the event fired by the Visual J# component.
' client.vb
' compile with: /reference:vjc_container.dll
Imports System
Public Class Form
WithEvents Dim c As New Container()
Public Shared Sub Main()
Dim f As New Form
End Sub
Public Sub New()
c.Value(0) = "String1"
c.Value(1) = "String2"
' Fetching read-only property
System.Console.WriteLine(c.Count)
End Sub
' Sink Visual J# event
Public Sub EvListener() Handles c.Event
System.Console.WriteLine("Visual J# Event Fired")
End Sub
End Class
Output
Visual J# Event Fired Visual J# Event Fired 2
See Also
Reference
Syntax for Targeting the .NET Framework
Definition and Use of Events
Defining and Using Properties