devxlogo

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

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

devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist