4

In C# you can define explicit add/remove code when an event is subscribed/unsubscribed.

Is this possible in VB.net?

leiflundgren
  • 2,876
  • 7
  • 35
  • 53

2 Answers2

6
Imports System.Runtime.CompilerServices
...
    Private propchanged As PropertyChangedEventHandler

    Public Custom Event PropertyChanged As PropertyChangedEventHandler

        <MethodImpl(MethodImplOptions.Synchronized)> _
        AddHandler(ByVal value As PropertyChangedEventHandler)
            propchanged = DirectCast([Delegate].Combine(propchanged, value), PropertyChangedEventHandler)
        End AddHandler

        <MethodImpl(MethodImplOptions.Synchronized)> _
        RemoveHandler(ByVal value As PropertyChangedEventHandler)
            propchanged = DirectCast([Delegate].Remove(propchanged, value), PropertyChangedEventHandler)
        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs)
            Dim handler = propchanged
            If handler IsNot Nothing Then handler(sender, e)
        End RaiseEvent
    End Event
Hans Passant
  • 922,412
  • 146
  • 1,693
  • 2,536
1

Looks like it can be done making use of custom events as defined here.

  ' Define the MouseDown event property.
    Public Custom Event MouseDown As MouseEventHandler
        ' Add the input delegate to the collection.
        AddHandler(Value As MouseEventHandler)
            listEventDelegates.AddHandler(mouseDownEventKey, Value)
        End AddHandler
        ' Remove the input delegate from the collection.
        RemoveHandler(Value As MouseEventHandler)
            listEventDelegates.RemoveHandler(mouseDownEventKey, Value)
        End RemoveHandler
        ' Raise the event with the delegate specified by mouseDownEventKey
        RaiseEvent(sender As Object, e As MouseEventArgs)
            Dim mouseEventDelegate As MouseEventHandler = _
                listEventDelegates(mouseDownEventKey)
            mouseEventDelegate(sender, e)
        End RaiseEvent
    End Event
Aaron McIver
  • 24,527
  • 5
  • 59
  • 88