とりこらぼ。

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

目次

Blog 利用状況

ニュース

プロフィール

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

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic でなんとなくイベントとデリゲート その10。 - イベントの宣言はこんな感じ -

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


イベントとデリゲートについて


なんとなく(そしてしとやかに


お勉強しています、根は真面目なとりこびとです。こんにちは。

今回で「その10」です。10ですか、私の年齢と同じですね。

前回は「イベントのしくみはデリゲートでできてるっぽいぞ!」ってところまでやりました。今回はそのイベントのしくみとやらをつらつら書きます。

まず、前回使用したコードをもう一度引っ張り出してきます。これです↓。イベントの宣言時にデリゲートを使用したほうでしたね。

Public Event DisplayNameChanged  As System.EventHandler

EventHandler デリゲートを使用したイベントの宣言でしたね。まずはコイツがどうなっているのか調べましたところ、Event ステートメントの宣言に対し、以下のコードが追加されるようです。

    Private DisplayNameChangedEvent As EventHandler

    Public Sub add_DisplayNameChanged(ByVal d As EventHandler)

        DisplayNameChangedEvent = CType([Delegate].Combine(DisplayNameChangedEvent, d), EventHandler)

    End Sub

    Public Sub remove_DisplayNameChanged(ByVal d As EventHandler)

        DisplayNameChangedEvent = CType([Delegate].Remove(DisplayNameChangedEvent, d), EventHandler)

    End Sub

どれどれ?ふむふむ・・・、EventHandler 型のプライベートな変数(名前は「イベント名 + Event」。)と、パブリック(というか、これはイベントのスコープと同じ?)なメソッドが2つ(名前はそれぞれ「add_ + イベント名 」、「remove_ + イベント名」)ありますね。メソッドの中身を見ても特に変わったことはしていなくて、その7で出てきたDelegate.Combine メソッドとかを使ってるだけっぽいです。(Delegate.Remove は削除するです。)




同様に、これ↓。宣言時にデリゲートを使用せず、メソッドのように宣言したほうです。

Public Event DisplayNameChanged(ByVal sender As ObjectByVal e As EventArgs)

これはどうなっているのかというと、シグニチャが同じであっても、新たにデリゲートを宣言したことになります。こんな感じ↓

    Public Delegate Sub DisplayNameChangedEventHandler(ByVal sender As ObjectByVal e As EventArgs)

    Private DisplayNameChangedEvent As DisplayNameChangedEventHandler

    Public Sub add_DisplayNameChanged(ByVal d As DisplayNameChangedEventHandler)

        DisplayNameChangedEvent = CType([Delegate].Combine(DisplayNameChangedEvent, d), DisplayNameChangedEventHandler)

    End Sub

    Public Sub remove_DisplayNameChanged(ByVal d As EventHandler)

        DisplayNameChangedEvent = CType([Delegate].Remove(DisplayNameChangedEvent, d), DisplayNameChangedEventHandler)

    End Sub

こちらも見てみると、デリゲートが一つ(名前は「イベント名 + EventHandler」になる。) と、後は上のほうでやったのと同じようなメンバ(ただし、EventHandler デリゲート型ではなく、DisplayNameChangedEventHandler デリゲート型により記述されたもの。)ができるみたいですね。




ふぅ~。イベントの中身を見てみると、少しずつイベントのしくみが見えてきました。デリゲート 型の変数、それに対するデリゲートの結合、または削除を行うメソッド。おもしろいですよね~って、これ・・・


最初のほうでやったアレっぽい気がしてきませんか?(・∀・)


というわけで次回に続きます~♪






※ 暗黙的に宣言される変数やメンバの名前と同じ名前のメンバを明示的に使用することはできないので注意してください~。

投稿日時 : 2007年11月9日 9:22

Feedback

# re: Visual Basic でなんとなくイベントとデリゲート その10。 - イベントの宣言はこんな感じ - 2007/11/09 11:18 とりこびと

add_・・・と、remove_・・・ってのは暗黙的に宣言されているはずなのに・・・呼べないの?

# Visual Basic でなんとなくイベントとデリゲート その11。 - イベントの発生はこんな感じ - 2007/11/09 14:22 とりこらぼ。

Visual Basic でなんとなくイベントとデリゲート その11。 - イベントの発生はこんな感じ -

タイトル
名前
Url
コメント