|
2009,06,29, Monday
C/C++を使っていた時には「ポインタ」ってよく使ってた、というよりも必須だったわけですが、そのポインタの使い方をちょっと思い出してみると「関数ポインタ」なるものがあったはず。
関数といえどもメモリ上に展開されているので、呼び出したい関数のエントリーポイントになるアドレスを必ずもっているはずなんですよ。 で、そのアドレスすのものを扱おうってのが関数ポインタでした。 なぜいきなりポインタなんてでてきたのか、それは「デリゲート(delegate)」が関数ポインタとよく似ているからです。 ただし、似ているだけで別物なので混同しないようにしないといけません。 delegateはメソッドを保持するオブジェクトです。つまり、delegateを使うとメソッドをintとかstringみたいな基本データ型を扱うのと似たような感覚で扱えるようになります。 それができて何がうれしいって、そりゃあやっぱりメソッドが実行時に切り替えられるってとこですよ。 他には「イベント」を使う場合、これはdelegateなしでは無理です 深く追求すればいろいろと難しいこともあるのかもしれませんが、そんなに深く追求しなくても多分問題なく使えるのでよしとします! イベントを使う場合にdelegateが必須なのはとっても簡単。 何か適当にコントローラ置いてイベントハンドラーを追加してみてください。 そのイベントハンドラーの名前って固定じゃないですよね?名前はどうだってよくて、重要なのは戻り値の型とパラメータの型および順序です。 それさえあっていればイベントハンドラーとして使えます。 delegateを意識していないだけで、恩恵を受けてるんですよね。 delegateの宣言と、格納するメソッドの戻り値の型、パラメータの型および順序はちゃんとあわせてくださいね。 あわせないとビルドできないはずだけど うーん、なんか読みにくい文章。。。 delegateを使った簡単な例で計算プログラムでも作ってみましょ。 実際にはこんな使い方しないかもしれないけど、こういう使い方もできるよっということで
| http://www3.to/su-house/index.php?e=23 |
| プログラミング::.NET Framework | 10:00 PM | comments (0) | trackback (0) | |
|
この記事に対するコメントの受付は終了しています。
コメント
|
|
この記事へのトラックバック受付は終了しています。
トラックバック
|
RSS 1.0










