タイトル : Re^2: デリゲートについて 投稿日 : 2006/12/14(Thu) 10:27 投稿者 : おーかみ
こんにちわ。 細かな指摘いたみいりますm(__)m > それが用いられているコードを漁って調べる方には労力が行って > いないのでは、ということです。 いやー、むしろ、VBtipsサイトとかのサンプルを見るにつけ、利点が分からなくなった感じがします^^; こちらさんとか http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_11/vbnet2_11_01.html こちらさんとか http://santamartadotnet.hp.infoseek.co.jp/documents/vbdotnet/eventanddelegate.html こちらさんとか http://www.bnote.net/vb/delegate.shtml 結局呼び出す関数を明示してるなら、普通に呼び出せばいいんでないの?・・・と。 いや、多分、これはあくまでも分かりやすく書いたもので、本質とは違うんだろうなとは 思うのですが。 「関数ポインタ」という表現で紹介されてるところも見かけるけど、その割りに、 ポインタそのものをやり取りしてるサンプルも見当たらないようで・・・・ これは探すのが下手なだけなのかもしれませんが。 つーか「関数ポインタ」がそういう使い方できるものなのかも知りませんが。 > Delegateになっていれば、呼び出される関数の差し替えが効きますよね。 > これにより、初めて双方向性の確保ができますし。 関数の差し替えということは、やはり関数のアドレスを直にやり取りして、 状況にあわせた関数をひとつの命令で使い分ける、ということでしょうか。 でも sub main このアドレスの関数を実行しろ(Aのアドレスのポインタ) このアドレスの関数を実行しろ(Bのアドレスのポインタ) end sub sub このアドレスの関数を実行しろ(受け取ったアドレスのポインタ) 指定アドレスの関数実行(受け取ったアドレスのポインタ) end sub sub A() ... end sub subB() ... end sub のような感じなら素直に関数呼べばいいんじゃないかと思うわけでして・・・ それに sub main この番号の関数を実行しろ(1) この番号の関数を実行しろ(2) end sub sub この番号の関数を実行しろ(受け取った数字) select 受け取った数字 case 1 A() case 2 B() end select end sub のほうが、後で分かりやすいんじゃないですかね? 使い分ける関数増える度に書き足さないと駄目ですが。 ・・・・・は!? コ コ デ ス カ ! ? ココナンダロウカ・・・ムムム・・・ 以下、考えてる事をそのままだらだら書くと、 いやでも、そもそも、結局使う関数を最初に明示してるんなら sub main A() B() end sub で十分だよなあ・・・ 「使う関数はあらかじめ決まるけど、その関数が受け取るべき引数が、プロシージャ内で決まらない」とかなら、 sub main アドレス = 前処理() 引数A=0 引数B=100 指定関数実行(引数A,引数B,アドレス) end sub function 前処理() as アドレス 前処理の都合で、使う関数の種類が変わる。 AかBの関数のアドレスのどちらかを返す。 end function とゆー感じか、とか考えられるけど、引数の内容も決まらないのに使うべき関数の種類が先に決まるなんて、そんな事態って起こりえるのかしら・・・ むしろ、どうあがいても、引数決らない事には関数呼べないのだから、使う関数を選ぶなんてのは最後でいいのでは・・・ という感じなのですが・・・・ 解釈が基礎から間違ってるのかなあ・・・ > なんだかんだ言って、.NETの最大の特徴の1つがDelegateですから、 やはり知らぬ癖に「こんなもん使えるか!」と放り投げない方が良い感じですねえ・・・。 御指摘を頂いたイベントプロシージャ等を踏まえ、もう少し掘り下げて考えて見ます。 ご教授有難うございます。 |