Imports System
Imports System.Collections
Delegate Sub NameChangedDelegate(ByVal new_name As String)
Public Class MainClass
Shared Sub Main(ByVal args As String())
Dim student As New Student
AddHandler student.NameChanged, AddressOf Student_NameChanged
AddHandler student.NameChanged, AddressOf Student_NameChanged
student.FirstName = "First Name"
RemoveHandler student.NameChanged, AddressOf Student_NameChanged
student.LastName = "Last Name"
RemoveHandler student.NameChanged, AddressOf Student_NameChanged
End Sub
Private WithEvents student As Student
Shared Private Sub Student_NameChanged(ByVal new_name As String) Handles student.NameChanged
Console.WriteLine("Student_NameChanged: " & new_name)
End Sub
End Class
Public Class Student
' The FirstName property.
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
' The LastName 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
' List to hold the event handler delegates.
Private m_EventDelegates As New ArrayList
' Defines the event handler signature.
Public Delegate Sub NameChangedDelegate(ByVal new_name As String)
' Define the custom NameChanged event.
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
|