とりこらぼ。

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

目次

Blog 利用状況

ニュース

プロフィール

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

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? -

Visual Basic でなんとなくイベントとデリゲート その3。 - イベントに関連することをちょっとだけ追記。 -

ただいまイベントとデリゲートについて勉強しています。


なんとなく     (そしてそれとなく)


ですが、何か?


「勉強しながらエントリ書くんじゃなくて勉強してからエントリ書けば楽ぢゃね?」という生暖かいお言葉をいただいています。どう考えてもその通りです。本当にありがとうございました。



ちょっとイベントに関していろいろコメントやエントリをいただきまして・・・そろそろボロが出そうですので(こらw)一旦イベントから離れます。

今回は「デリゲートって何ぞや?」ってのをお勉強します。デリゲートは、ほかのオブジェクトのメソッドを呼び出すために使用できるオブジェクトらしいです。


さっぱりわかりません!!


「関数ポインタみたいなもの」?・・・あ、ああ、あれね。で、関数ポインタの何色のやつに近いと思います!?私は緑色のヤツが一番近いと思うんですけど・・・。



・・・。



関数ポインタなんてしらないよぅ。


・・・しかたない、


関数ポインタとデリゲートの話は επιστημη さんに丸投げぢゃ~!!(名指しはやめなさい。





さて、こういうさっぱりなのはとりあえず書いてみるに限ります。で、それを見て2ヶ月くらい悩めばいいんですよ。あったまいいな~♪


どうせ私なんてあんこの入ってないあんぱんですから。orz


そろそろ本題に入りましょう。準備はこちら↓

Option Compare Binary
Option Explicit On
Option Strict On

Public Class Program
    Public Shared Sub Main()
        Program.ShowBufferinMessage("とりこびと")
    End Sub
    Private Shared Sub ShowBufferinMessage(ByVal targetName As String)
        Console.WriteLine("{0} の半分はやさしさで出来ています。", targetName)
    End Sub
End Class

Program クラス の ShowBufferinMessage メソッドの呼び出しでメッセージを出力するだけです。今回はコイツにデリゲートを絡めてみます。


ではまず、デリゲートの宣言から。デリゲートの宣言には Delegate ステートメントを使用します。たとえば、以下のような感じで。

Public Delegate Sub ShowMessageDelegate(ByVal targetName As String)

Visual Basic では、「デリゲートは、名前空間、モジュール、クラス、構造体レベルで宣言できますが、プロシージャ内では宣言できません。」だそうです。

見た目はSub プロシージャとあんまし変わりませんが、デリゲートの宣言です。プロシージャの宣言ではありません。

Option Compare Binary
Option Explicit On
Option Strict On

Public Delegate Sub ShowMessageDelegate(ByVal targetName As String)

Public Class Program
    Public Shared Sub Main()
        Program.ShowBufferinMessage("とりこびと")
    End Sub
    Private Shared Sub ShowBufferinMessage(ByVal targetName As String)
        Console.WriteLine("{0} の半分はやさしさで出来ています。", targetName)
    End Sub
End Class

とりあえず、名前空間に宣言してみました(名前空間の記述は無いですがw)。ShowBufferinMessage メソッドと、ShowMessageDelegate のシグニチャは一致させています。

まま、どんどん行きましょう!なにせさっぱり分かりませんから。現状 直接呼び出している ShowBufferinMessage メソッドをデリゲート経由で呼び出すって感じ・・・。

Option Compare Binary
Option Explicit On
Option Strict On

Public Delegate Sub ShowMessageDelegate(ByVal targetName As String)

Public Class Program
    Public Shared Sub Main()
        Dim showMessage As ShowMessageDelegate '  ・・・ (a)
        showMessage = New ShowMessageDelegate(AddressOf Program.ShowBufferinMessage) '  ・・・ (b)
        showMessage.Invoke("とりこびと"'  ・・・ (c)
    End Sub
    Private Shared Sub ShowBufferinMessage(ByVal targetName As String)
        Console.WriteLine("{0} の半分はやさしさで出来ています。", targetName)
    End Sub
End Class

・・・なんのこっちゃ?


ですよね。でもAddressOf キーワードとか、なんとなくいい感じですよね♪

ざっと読んだままと書いていきますと・・・

まず、(a) の行で ShowMessageDelegate 型の showMessageMethod という変数を宣言します。デリゲートの宣言って、シグニチャに対応した型 のデリゲートを宣言しているっぽいですね。クラスを作るのと同じ感覚かな~?コンパイラかだれかがどっかでShowMessageDelegate 型のクラスを作ってそうぽ。名前空間に直接作成できるし。

次に(b)の行で Program クラス の ShowBufferinMessage メソッド をコンストラクタに指定したShowMessageDelegate のインスタンスを作成します。単なる初期化ですよ、初期化。シグニチャが一致するやつなら指定できるのかしら?

んでもって、(c)で組み込みの Invoke メソッドを呼び出してデリゲートに関連付けられたメソッド(今回の場合は、ShowBufferinMessage メソッド)を呼び出すと。(組み込みってなんぞね?)



ふむふむ・・・要するにデリゲートってのはメソッドに対する参照を持てるクラスってことなのね?




あ、あの・・・


いまさらですけど・・・ちょっといいですか?


AddressOf キーワードってなんなのさ?


というわけ(?)で続きますです。

投稿日時 : 2007年10月25日 8:54

Feedback

# re: Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? - 2007/10/25 10:10 επιστημη

「だが断る!」

# re: Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? - 2007/10/25 10:22 とりこびと

επιστημηさん、コメントありがとうございます。

>「だが断る!」

ちぇー♪

じゃ誰に投げれば・・・?

# 関数ポインタのみ! 2007/10/25 10:32 ながせろぐ

関数ポインタのみ!

# re: Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? - 2007/10/25 10:53 とりこびと

ながせさんナイスキャッチ♪

# Visual Basic でなんとなくイベントとデリゲート その5。 - Address Of 'AddressOf' - 2007/10/25 13:55 とりこびと ぶろぐ。

Visual Basic でなんとなくイベントとデリゲート その5。 - Address Of 'AddressOf' -

# re: Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? - 2007/10/25 22:43 やまだ

>「勉強しながらエントリ書くんじゃなくて勉強してからエントリ書けば楽ぢゃね?」という生暖かいお言葉をいただいています。どう考えてもその通りです。本当にありがとうございました。
うわあぁ、こんなところで巻き添えに(爆)。
だって勉強してからじゃ間に合わない……。

なのに、どうしてこんなペースで進められることができるのでしょう?
ペース早くて、ついていけませんー(T^T)

# re: Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? - 2007/10/26 8:51 とりこびと

やまださん、コメントありがとうございます。

>なのに、どうしてこんなペースで進められることができるのでしょう?

とりこびとの中の人が「とり」「こ」「びと」の3人だからです(嘘

エントリで一番時間が掛かるのはツカミとオチです。
今回それがおろそかですので、若干エントリが早いですw

# Visual Basic でなんとなくイベントとデリゲート その5。 - Address Of 'AddressOf' - 2007/10/26 11:13 とりこびと ぶろぐ。

Visual Basic でなんとなくイベントとデリゲート その5。 - Address Of 'AddressOf' -

# 関数ポインタ - Windows での使われ方 2007/10/30 21:38 何となく Blog by Jitta

関数ポインタ - Windows での使われ方

# tJpDwbfokbJ 2011/09/28 23:31 http://oemfinder.com

iaXxY0 Pleased to read intelligent thoughts in Russian. I`ve been living in England for already 5 years!...

# YYarOshCIIh 2011/10/06 0:19 http://www.cpc-software.com/products/Download-Micr

I must admit, the webmaster is a cool guy..!

# qxwMwWnSHqSXoFEEl 2011/11/02 5:26 http://www.pharmaciecambier.com/

Yet, much is unclear. Could you describe in more details!...

# qBMnRIfHiuYhUfrFkU 2011/11/02 6:21 http://optclinic.com/

Left on my site a link to this post. I think many people will be interested in it..!

# wmoBTPrwFP 2011/11/08 19:23 http://www.buyplavixonline.net

Received the letter. I agree to exchange the articles.

# vjHGfuMlrtNaZAT 2011/11/16 2:57 http://circalighting.com/category.aspx?cid=1

Hello! How do you feel about young composers?!...

# zMKSeNwvxB 2011/11/16 3:37 http://catalinabiosolutions.com/index.php/oil-clea

Received the letter. I agree to exchange the articles.

# qyYaSuTLpGKQwEnxmu 2011/11/16 3:57 http://www.laurenslinens.com/boysbedding.html

I read and feel at home. Thanks the creators for a good resource..!

# ApkRHFKCBC 2011/11/16 4:41 http://www.hooksandlattice.com/garden-table.html

The topic is pretty complicated for a beginner!...

タイトル
名前
Url
コメント