tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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ですから、

やはり知らぬ癖に「こんなもん使えるか!」と放り投げない方が良い感じですねえ・・・。
御指摘を頂いたイベントプロシージャ等を踏まえ、もう少し掘り下げて考えて見ます。

ご教授有難うございます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。