Top > .NET Visual C#言語入門 > デリゲート
プログラム構造 列挙型(enum) コンストラクタ・デストラクタ
スケルトン 配列 メソッド
クラス内の記述構成 構造体 プロパティ
HalloWorld 修飾子 静的クラスと静的メンバ
コマンドライン引数 プリプロセッサ ディレクティブ フィールド
コメント 例外と例外処理 演算子のオーバーロード
ステートメント(文) 可変個引数リスト(params) イベント(割り込み)
式(演算子) 名前空間 デリゲート
変数とデータ型 クラスとオブジェクト インデクサ
型変換(キャスト) クラス(class) デリゲート&イベント発生と受信サンプル
定数(Const/Readonly) 部分クラス定義  
文字列(string) 継承  

デリゲート

デリゲートは、関数ポインタに代わる機能で、コールバック関数などの作成に用いられます。また、C++では不完全だった型も含めてコールバックを保証します。

デリゲート・オブジェクトは、通常、デリゲートがラップするメソッドの名前を指定することによって、または匿名メソッドを使用して構築されます。

デリゲートがインスタンス化されると、デリゲートに対して行われたメソッド呼び出しは、デリゲートによってそのメソッドに渡されます。

呼び出し元によってデリゲートに渡されたパラメータはメソッドに渡され、メソッドからの戻り値 (存在する場合) は、デリゲートによって呼び出し元に返されます。これをデリゲートの呼び出しと言います。

インスタンス化されたデリゲートは、ラップされたメソッドそのもののように呼び出すことができます。

デリゲートの特徴

  • デリゲートは、C++ の関数ポインタに似ていますが、タイプ セーフです。
  • メソッドをパラメータとして渡すことができます。
  • デリゲートは、コールバック メソッドを定義するのに使用できます。
  • デリゲートは連結できます(例えば、複数のメソッドを 1 つのイベントで呼び出す)。
  • メソッドは、デリゲートのシグネチャに正確に一致する必要がありません。
  • C# Version 2.0 では、匿名メソッドという概念を導入し、別個に定義されたメソッドの代わりにコード ブロックをパラメータとして渡すことができます。

メソッドを参照する型です。デリゲートにメソッドを代入すると、デリゲートはそのメソッドとまったく同じように動作します。デリゲート ・メソッドは、パラメータと戻り値を指定して他のメソッドと同じように使用できます。

public delegate int PerformCalculation(int x, int y);

デリゲートのシグネチャ (シグネチャは、戻り値の型とパラメータで構成されます) に一致するメソッドは、デリゲートに代入できます。このため、メソッド呼び出しをプログラムによって変更でき、また新しいコードを既存のクラスに接続することもできます。デリゲートのシグネチャを知っている限り、独自のデリゲート メソッドを割り当てることができます。

このようにメソッドをパラメータとして参照できるため、デリゲートはコールバック メソッドを定義するのに最適です。たとえば、並べ替えアルゴリズムには、2 つのオブジェクトを比較するメソッドへの参照を渡すことができます。比較コードを分離することによって、アルゴリズムをより一般的な形で記述できます。

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします