2009/02/27(Fri) 21:56:05 編集(投稿者)
DelegateクラスのCombineメソッドを使うことで実現できます。
> Sub Main()
> Dim callable As New Callable()
> Dim caller As New Caller()
>
> caller.ShowMessage = AddressOf callable.ConcreteShowMessage
>
> Dim fancy As New Fancy()
> AddHandler caller.ShowMessage, AddressOf fancy.ShowFancyMessage
> ~~~~~~~~~~~@
> caller.CallDelegate()
>
> End Sub
Sub Main()
Dim callable As New Callable()
Dim caller As New Caller()
Dim fancy As New Fancy()
caller.ShowMessage = [Delegate].Combine( _
New ShowMessageDelegate(AddressOf callable.ConcreteShowMessage), _
New ShowMessageDelegate(AddressOf fancy.ShowFancyMessage))
caller.CallDelegate()
End Sub
ここではまとめて登録するようなコード例にしちゃってますが、
caller.ShowMessage にcallable.ConcreteShowMessageの分を登録してから、
そのcaller.ShowMessageにfancy.ShowFancyMessageの分を連結して
caller.ShowMessage を追加しなおすこともできます。
> と言う事は、VB.NETではイベントで無い限りマルチキャストデリゲートが出来ない
> のでしょうか?
VBで用意されている文法での実現方法はたぶんないと思います。
> それとも、私の翻訳が間違っているのでしょうか?
方向性はあっていますが、AddHandlerの構文を見るとわかりますが、イベントにしか適用できません。
> 出来ないなら出来ないでいいんですが…イベントとデリゲートの関係を理解する上
> では、困るんでないかなぁ…と思う次第です。
VB流の方法でプログラミングする限りでは、デリゲートの存在を知らなくてもイベントが使えるようになってます。
#知っておくに越したことがないのは言うまでもないですが