VB.NET (Visual Studio 2008、.NET 3.5) でカスタム イベントを実装するためのヒントを探しています。
「通常の」(非カスタム) イベントは実際にはデリゲートであることを知っているので、カスタム イベントを実装するときにデリゲートを使用することを考えていました。一方、Andrew Troelsenの本「Pro VB 2008 and the .NET 3.5 Platform」では、すべてのカスタム イベントの例でコレクション型を使用しており、Microsoft のサンプル コードはその考え方と一致しています。
だから私の質問は、あるデザインを他のデザインよりも選ぶ際に考慮すべきことは何ですか? 各デザインの長所と短所は何ですか? 「通常の」イベントの内部実装に似ているのはどれですか?
以下は、2 つの設計を示すサンプル コードです。
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