連載改訂版 C#入門第13章 処理を委譲するデリゲート |
![]() |
13-9 委譲先の合成
デリゲートのインスタンスは委譲先メソッドに関する情報を含むが、この情報はリストとして保持される。つまり、委譲先メソッドは複数指定することもできるというわけである。List 13-9は2つの委譲先メソッドを指定した例である。
|
|
| List 13-9 |
これを実行するとFig.13-9のようになる。
![]() |
| Fig.13-9 |
ここでポイントになるのは、27行目の+演算子である。デリゲート・インスタンスは、+演算子や+=演算子で足し合わせることができる。その結果、2つのデリゲート・インスタンスが持つ委譲先メソッドのリストが合成され、1つのリストにまとめられる。
このように複数の委譲先メソッドが合成されたデリゲート・インスタンスを、28行目のように呼び出すと、リストに属するすべてのメソッドが呼び出される。複数の処理をまとめて実行させるには便利な機能だが、戻り値を受け取りたい場合は適切ではない。一度にいくつものメソッドを呼び出せるが、受け取れる戻り値は最後に呼ばれたメソッドの戻り値、ただ1つだけである。
13-10 委譲先リストの変更
デリゲートに含まれる委譲先リストは、いつでも追加削除できる。追加には+や+=演算子を使い、削除には-=演算子を用いる。List 13-10はリストの追加と削除を行うサンプル・ソースである。
|
|
| List 13-10 |
これを実行するとFig.13-10のようになる。
![]() |
| Fig.13-10 |
28行目の段階では、samplesには1つしかメソッドが登録されていないので、それだけが呼ばれる。しかし、33行目の段階では、4つのメソッドが登録されいて、それらのすべてが呼び出される。しかし、34行目で1つの委譲先を取り除いているので、36行目の段階では、3つのメソッドが呼び出されている。
13-11 デリゲート型の同一性
デリゲートで委譲するメソッドは戻り値と引数が一致していればよいと書いたが、デリゲート型同士は、戻り値と引数が一致していても、同じとは見なされない。List 13-11はコンパイルできない誤った例である。
|
|
| List 13-11 |
18行目のように、異なるデリゲート型のデリゲート・インスタンスを1つのリストにまとめることはできない。例え、戻り値と引数が一致していても、である。![]()
『新プログラミング環境 C#がわかる+使える』本記事は、(株)技術評論社が発行する書籍『新プログラミング環境 C#がわかる+使える』から許可を得て一部分を転載したものです。 【本連載と書籍の関係について 】 この書籍は、本フォーラムで連載した「C#入門」を大幅に加筆修正し、発行されたものです。連載時はベータ版のVS.NETをベースとしていましたが、書籍ではVS.NET製品版を使ってプログラムの検証などが実施されています。技術評論社、および著者である川俣晶氏のご好意により、書籍の内容を本フォーラムの連載記事として掲載させていただけることになりました。 →技術評論社の解説ページ ご注文はこちらから |
| INDEX | ||
| 改訂版 C#入門 | ||
| 第13章 処理を委譲するデリゲート | ||
| 13-1 デリゲートとは何か? | ||
| 13-3 staticなメソッドへの委譲 | ||
| 13-6 継承でも実現できるか? | ||
| 13-9 委譲先の合成 | ||
| 「連載:改訂版 C#入門」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





