Dynamically setting an event handler for a class’ event via reflection

Here it is some code that shows how to use reflection to dynamically set an event handler for a class’ event.

Sub TestSub()    ' create a Person     Dim pe As New Person()     ' get a reference to the EventInfo for this object    Dim peEv As EventInfo = pe.GetType.GetEvent("PropertyChanged")    ' create a delegate to the local procedure    Dim peDel As [Delegate] = [Delegate].CreateDelegate(peEv.EventHandlerType, _        Me, "PropertyChanged")    ' make the local procedure a handler for the event    peEv.AddEventHandler(pe, peDel)     ' set a propety via reflection to prove that it works    ' note how you can create the array of arguments on the fly    pe.GetType.InvokeMember("Name", BindingFlags.SetProperty, Nothing, pe, _        New Object() {"John"})     ' (always remove event handlers)    peEv.RemoveEventHandler(pe, peDel)End Sub Private Sub PropertyChanged(ByVal propertyName As String, _    ByVal newValue As Object)    MessageBox.Show("Property " & propertyName & _        " has changed. The new value is " & newValue.ToString)End Sub Class Person    Event PropertyChanged(ByVal propertyName As String, _        ByVal newValue As Object)     Dim m_Name As String     Property Name() As String        Get            Return m_Name        End Get        Set(ByVal Value As String)            If Value <> m_Name Then                m_Name = Value                RaiseEvent PropertyChanged("Name", m_Name)            End If        End Set    End PropertyEnd Class

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: