とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic でなんとなくイベントとデリゲート その8。 - デリゲートって何ぞや? -

Visual Basic でなんとなくイベントとデリゲート その7。 - デリゲートでもうちょっとだけ遊ぶ -


というわけで今回からイベントとデリゲートについての拙いエントリに戻ります♪


前回調べてみよ~って書いていたので(もう忘れられてますかね?w)調べました。


あくまでなんとなくですけど。


Delegate ステートメント ってなにさ?ってことだったのですが、Delegate ステートメントを使用して書かれたデリゲートはMulticastDelegate クラスを継承したデリゲート クラスとしてVisual Basic コンパイラによって作成されます

これさえ分かっていれば、あとはMSDNを頼りになんとかなりそうですね♪

前回のエントリで書いた以下のコード、ShowMessageDelegate にキャストすることで Invoke メソッドがちゃんと String 型の引数を取れるのは Visual Basic コンパイラがそういう風に作ってくれているからなんですね♪

Option Compare Binary
Option Explicit On
Option Strict On

Imports System

Public Delegate Sub ShowMessageDelegate(ByVal targetName As String)

Public Class Program

    Public Shared Sub Main()

        Dim bufferinMessenger As New Messenger

        bufferinMessenger.SetPhrase("{0} の半分はやさしさで出来ています。")

        Dim showBufferinMessage As ShowMessageDelegate

        showBufferinMessage = AddressOf bufferinMessenger.ShowMessage

        Dim jojoMessenger As New Messenger

        jojoMessenger.SetPhrase("さすが{0}! おれたちにできない事を平然とやってのけるッ そこにシビれる! あこがれるゥ!")

        Dim showJoJoMessage As ShowMessageDelegate

        showJoJoMessage = AddressOf jojoMessenger.ShowMessage

        Dim combinedDelegate As [Delegate] = [Delegate].Combine(showBufferinMessage, showJoJoMessage)

        Dim showMessages As ShowMessageDelegate = DirectCast(combinedDelegate, ShowMessageDelegate)

        showMessages.Invoke("επιστημηさん")

    End Sub

End Class

なお Visual Basic では、Delegate ステートメントを使用せず、MulticastDelegate クラスを直接継承したクラスを書くことをサポートしていません。といっても、今のところ、私は「作ってくれるんだからいいぢゃん♪」なんですけどね。

このあたりはMSDN:共通型システムのデリゲートに書かれています。引用すると、

すべてのデリゲートが MulticastDelegate を継承し、System.MulticastDelegate は Delegate を継承します。C#、Visual Basic、および C++ 言語はこれらの型からの継承を許可せず、代わりにデリゲートを宣言するためのキーワードを提供します。

です。(Visual Basic だけでなく、C# や C++(CLI?) もそういう仕様なんですね。)

ふむふむ・・・すべての型がMulticastDelegateを継承するということは、とあるデリゲートを継承したデリゲートなんてのも作れないのか・・・。




さて、今回は少し間が開いてしまったのでこのあたりで終わりまそ。で、デリゲートってのが、なんとなく分かってきたところで、「イベントとデリゲート」な話に戻ります~。

投稿日時 : 2007年11月6日 11:37

Feedback

# re: Visual Basic でなんとなくイベントとデリゲート その8。 - デリゲートって何ぞや? - 2007/11/06 12:20 シャノン

ちなみに Delegate と MulticastDelegate って2種類あるのは歴史的な事情で、たいした意味はありません。

# re: Visual Basic でなんとなくイベントとデリゲート その8。 - デリゲートって何ぞや? - 2007/11/06 14:20 とりこびと

シャノン さん、コメントありがとうございます。

>歴史的な事情

そこんとこ詳しく!

# re: Visual Basic でなんとなくイベントとデリゲート その8。 - デリゲートって何ぞや? - 2007/11/06 14:41 シャノン

詳しくは知らないw
http://blogs.msdn.com/brada/archive/2004/02/05/68415.aspx

# Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/08 11:43 とりこらぼ。

Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? -

タイトル
名前
Url
コメント