Imports System.Collections
Delegate Sub NameChangedDelegate(ByVal new_name As String)
public class Test
Private WithEvents emp As Employee
public Shared Sub Main
Dim emp As New Employee
AddHandler emp.NameChanged, AddressOf Employee_NameChanged
emp.FirstName = "Rod"
RemoveHandler emp.NameChanged, AddressOf Employee_NameChanged
emp.LastName = "Stephens"
RemoveHandler emp.NameChanged, AddressOf Employee_NameChanged
End Sub
Private Shared Sub Employee_NameChanged(ByVal new_name As String) Handles emp.NameChanged
Console.WriteLine("Employee_NameChanged: " & new_name)
End Sub
End class
Public Class Employee
Private m_FirstName As String
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(ByVal value As String)
m_FirstName = value
RaiseEvent NameChanged(m_FirstName & " " & m_LastName)
End Set
End Property
Private m_LastName As String
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(ByVal value As String)
m_LastName = value
RaiseEvent NameChanged(m_FirstName & " " & m_LastName)
End Set
End Property
Private m_EventDelegates As New ArrayList
Public Delegate Sub NameChangedDelegate(ByVal new_name As String)
Public Custom Event NameChanged As NameChangedDelegate
AddHandler(ByVal value As NameChangedDelegate)
Console.WriteLine("AddHandler")
m_EventDelegates.Add(value)
End AddHandler
RemoveHandler(ByVal value As NameChangedDelegate)
Console.WriteLine("RemoveHandler")
m_EventDelegates.Remove(value)
End RemoveHandler
RaiseEvent(ByVal new_name As String)
Console.WriteLine("RaiseEvent (" & new_name & ")")
For Each a_delegate As NameChangedDelegate In m_EventDelegates
a_delegate(new_name.Replace(" ", "+"))
Next a_delegate
End RaiseEvent
End Event
End Class
AddHandler
AddHandler
RaiseEvent (Rod )
Employee_NameChanged: Rod+
RemoveHandler
RaiseEvent (Rod Stephens)
Employee_NameChanged: Rod+Stephens
RemoveHandler