デリゲート (C# プログラミング ガイド)
デリゲートは、メソッドを参照する型です。デリゲートにメソッドを代入すると、デリゲートはそのメソッドとまったく同じように動作します。デリゲート メソッドは、パラメータと戻り値を指定して他のメソッドと同じように使用できます。この例を次に示します。
public delegate int PerformCalculation(int x, int y);
デリゲートのシグネチャ (シグネチャは、戻り値の型とパラメータで構成されます) に一致するメソッドは、デリゲートに代入できます。このため、メソッド呼び出しをプログラムによって変更でき、また新しいコードを既存のクラスに接続することもできます。デリゲートのシグネチャを知っている限り、独自のデリゲート メソッドを割り当てることができます。
このようにメソッドをパラメータとして参照できるため、デリゲートはコールバック メソッドを定義するのに最適です。たとえば、並べ替えアルゴリズムには、2 つのオブジェクトを比較するメソッドへの参照を渡すことができます。比較コードを分離することによって、アルゴリズムをより一般的な形で記述できます。
デリゲートの概要
デリゲートには、次の特徴があります。
デリゲートは、C++ の関数ポインタに似ていますが、タイプ セーフです。
デリゲートを使用すると、メソッドをパラメータとして渡すことができます。
デリゲートは、コールバック メソッドを定義するのに使用できます。
デリゲートは連結でき、たとえば、複数のメソッドを 1 つのイベントで呼び出すことができます。
メソッドは、デリゲートのシグネチャに正確に一致する必要がありません。詳細については、「デリゲートの共変性と反変性 (C# プログラミング ガイド)」を参照してください。
C# Version 2.0 では、匿名メソッドという概念を導入し、別個に定義されたメソッドの代わりにコード ブロックをパラメータとして渡せるようにしています。
このセクションの内容
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
1.11 デリゲート
4.2.6 デリゲート型
7.5.5.2 デリゲートの呼び出し
15 デリゲート