我正在寻找一些关于在 VB.NET(Visual Studio 2008、.NET 3.5)中实现自定义事件的指针。
我知道“常规”(非自定义)事件实际上是委托,所以我在实现自定义事件时考虑使用委托。另一方面,Andrew Troelsen的“Pro VB 2008 和 .NET 3.5 平台”一书在他的所有自定义事件示例中都使用了集合类型,而微软的示例代码符合这一思路。
所以我的问题是:在选择一种设计而不是另一种设计时,我应该考虑哪些因素?每种设计的优缺点是什么?其中哪一个类似于“常规”事件的内部实现?
下面是演示这两种设计的示例代码。
Public Class SomeClass
Private _SomeEventListeners As EventHandler
Public Custom Event SomeEvent As EventHandler
AddHandler(ByVal value As EventHandler)
_SomeEventListeners = [Delegate].Combine(_SomeEventListeners, value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
_SomeEventListeners = [Delegate].Remove(_SomeEventListeners, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
_SomeEventListeners.Invoke(sender, e)
End RaiseEvent
End Event
Private _OtherEventListeners As New List(Of EventHandler)
Public Custom Event OtherEvent As EventHandler
AddHandler(ByVal value As EventHandler)
_OtherEventListeners.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
_OtherEventListeners.Remove(value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
For Each handler In _OtherEventListeners
handler(sender, e)
Next
End RaiseEvent
End Event
End Class