C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 58 を表示中)
■33434 / )  Re[1]: VB2005でマルチキャストデリゲート
□投稿者/ よねKEN (279回)-(2009/02/27(Fri) 21:42:44)
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流の方法でプログラミングする限りでは、デリゲートの存在を知らなくてもイベントが使えるようになってます。
#知っておくに越したことがないのは言うまでもないですが

返信 編集キー/


管理者用

- Child Tree -