tagCANDY CGI VBレスキュー(花ちゃん)の雑談用掲示板
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の雑談用掲示板
Re: コールバック関数 ( No.2 )
日時: 2010/05/26 09:20
名前: 魔界の仮面弁士

【この文を削除しないで投稿して下さい】
> VBについての質問ではないのでこちらに投稿しました。
VB.NET 掲示板で良いと思います。


> デリゲードについて勉強してるんですが
デリゲードではなく、
デリゲートですよね。(Delegate)


> デリゲードってコールバック関数の事だと知りました。
一つのデリゲート インスタンスに複数の関数呼び出しを登録することもできますし、
関数だけではなく戻り値の無いメソッドも扱えますので、厳密には同じものでは
ありませんが…端的にはコールバック関数のようなものと言えるかも知れませんね。


> 忙しい人が、"これやっておいて"と頼む状況だと思うのですが
そういう使い方もできますが、処理ロジックを外注する際にも使われます。

.NET で言えば、Array.Find(Of T) メソッドに使われる Predicate(Of T) デリゲートや、
Array.ForEach(Of T) メソッドに使われる Action(Of T) デリゲートなどの利用パターンです。

 Dim a() As Object = {123, Now, "test"}
 Array.ForEach(a, AddressOf MsgBox)


配列の内容をどのように検索するか、個々のメンバをどのように処理するのかは
Array クラス側では事前に定義できません。そのため、処理内容をデリゲートを通じて
外部から指定してもらうという形になっています。

そして、これを発展させたものが、いわゆる「イベント」です。
代表的なのは、Click イベントなどに利用される EventHandler デリゲートですね。

たとえば Button クラスは、クリック時に何かの処理を行わせるためのコントロールですよね。
しかしその処理内容がどういう物であるかを、Button クラス自身は知りません。
処理内容を知っているのは、ボタンを使う側(一般的には Form)です。

そこで、Click イベント(として登録される EventHandler デリゲート)を通じて
Button を利用する側に、その処理内容を提示してもらう形をとっています。

# なおイベントやデリゲートを使わずとも、Button を継承して OnClick メソッドを
# オーバーライドすれば、クリック時の処理を再定義することはできます。



 [スレッド一覧へ] [親スレッドへ]