とりこらぼ。

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

目次

Blog 利用状況

ニュース

プロフィール

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

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

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

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


前回までデリゲートを


なんとなく(そして楽しく!)


お勉強してきて少しマンネリな空気が流れてきそうな感じですので、続きモノのタイトルの通り、「イベントとデリゲート」の濃厚な絡みをお届けすることにします。(卑猥な表現はやめなさい。

というわけで、その1で使用したWankumaMember クラスをもう一度ひっぱり出してきました。

Option Compare Binary
Option Explicit On
Option Strict On

Imports System

Public Class WankumaMember

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

    Private _displayName As String

    Public Property DisplayName() As String
        Get
            Return Me._displayName
        End Get
        Set(ByVal value As String)
            Me._displayName = value
            Me.OnDisplayNameChanged(New EventArgs)
        End Set
    End Property

    Protected Sub OnDisplayNameChanged(ByVal e As EventArgs)

        RaiseEvent DisplayNameChanged(Me, e)

    End Sub

End Class

で、ここ↓!ここ↓!イベントの宣言部分です。

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

その1でイベントの宣言方法はいくつかありますって書きましたが、そのうちの一つがこれでした。で、今回はもう一つの方法。

Public Event DisplayNameChanged  As System.EventHandler

えっ・・・と、


しすてむ・・・いべんとはんどら?


これ、何でしょうね。分からないならMSDNに突撃です!(MSDNの使い方はじったさんが勉強会で教えてくれるそうですよ~。

MSDN:EventHandler デリゲート

EventHandler って名前のデリゲートなのですね。そっか、そういうことね。つまり・・・デリゲートなんだけど EventHandler って名前なのですね。


・・・ややこしいんですけど


要するにイベントの宣言にデリゲートを使えます~ってことですか。EventHandler デリゲートのシグニチャは

ByVal sender As ObjectByVal e As EventArgs

ですので、今回のDisplayNameChanged イベントの宣言にそのまんま使えましたですね。



ここで、ようやくイベントのお話の中にデリゲートが混じってくるようになりました。どうやらイベントのしくみにはデリゲートが利用されているようですね。といったところで今回は少し短めにして一旦筆をおきます。(いろいろ一気に詰め込むと耳からこぼれてしまいますしね。orz)次回はそのイベントのしくみを調べて書くことにします。


投稿日時 : 2007年11月8日 11:43

Feedback

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/08 13:14 R・田中一郎

同じ理由で、ラムダ式もイベントで使えます。

button.Click += (sender, e) => Console.WriteLine(sender);

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/08 14:05 まさる

>(sender, e) =>
ラムダ式って、複数の変数(?)もいけたんですね。いまさらながら知らなかった・・・

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

コメントありがとうございます。

>>R・田中一郎さん

>ラムダ式もイベントで使えます。

そうなんですね。
でも、どういった場合に使いましょうか?

>>まさるさん

>ラムダ式って、複数の変数(?)もいけたんですね。いまさらながら知らなかった・・・

ラムダタンにハァハァしてくださいw

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/09 8:59 R・田中一郎

>>ラムダ式もイベントで使えます。
>
>そうなんですね。
>でも、どういった場合に使いましょうか?

わくわくしたいときw

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

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

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/09 9:38 Streetw☆

匿名メソッドを使う場面と同じかも?
どいうった場面かというと(ry

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/09 10:19 R・田中一郎

そうですね。
匿名メソッドの型推論版みたいですね。

var 嫌いな人は、同様の理由で、

button.Click += delegate(object sender, EventArgs e) { Console.WriteLine(sender); }

て書くのかな?^^;

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/09 14:40 とりこびと

コメントありがとうございます。

>>Rさん

>わくわくしたいときw

ってことはRさんは常に使っておられるのですねww

>匿名メソッドの型推論版みたいですね。

なるほど~。勉強になります♪

>>Streetw☆さん

>匿名メソッドを使う場面と同じかも?

イベントを匿名メソッドでハンドル(日本語ムズカシイネ)っていう場面があまり浮かばないんですけど・・・。


>どいうった場面かというと(ry

どいう~w

じゃないくてそこ略したらダメでしょうww

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/09 15:14 R・田中一郎

>ってことはRさんは常に使っておられるのですねww

マジレスですが、そうです^^;

デザイナでイベント登録するのは、最初から使っていませんでしたし、複数で同一の処理を実行するメソッドということなら、必要な引数だけを実装したメソッドを自作する方が好きなんです。
例えば、以下の場合とか・・・

label.Clicl += (sender, e) => this.PrintObject(sender);
button.Click += (sender, e) => this.PrintObject(sender);
private void PrintObject(object sender) { Console.WriteLine(sender); }

ただ、匿名メソッドの場合、引数を使わない時は省略できるんですよね。

button.Click += delegate { this.PrintHogeHoge(); };

ラムダ式でも、こんな感じでできるといいんですけど、実際どうなんだろう?

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/09 21:05 とりこびと

R・田中一郎さん、コメントありがとうございます。

これって・・・System.EventHandler 型と同じデリゲートを毎回生成していることになるんですよね?

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/13 10:09 R・田中一郎

>これって・・・System.EventHandler 型と同じデリゲートを毎回生成していることになるんですよね?

ん?
System.EventHandler 型を元に型推論しているから(sender, e)って書けるということなのですが。

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/13 10:12 R・田中一郎

省略しないで書くと、こうです。

button.Click += (object sender, EventArgs e) =>
{
  this.PrintObject(sender);
}

# re: Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/13 10:21 とりこびと

R・田中一郎さん、コメントありがとうございます。

>System.EventHandler 型を元に型推論しているから(sender, e)って書けるということなのですが。

あ、そっか、そういうことですか。
完全に読み誤っていました。すみません。m(_ _)m


C♯はまだまだ直感的に読めてないです。がんばります!!
ま、まけるもんかぁ~!!

タイトル
名前
Url
コメント