Event VB.Net Tutorial

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