.NET Visual C#言語入門 > デリゲート
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
デリゲート
デリゲートは、関数ポインタに代わる機能で、コールバック関数などの作成に用いられます。また、C++では不完全だった型も含めてコールバックを保証します。
デリゲート・オブジェクトは、通常、デリゲートがラップするメソッドの名前を指定することによって、または匿名メソッドを使用して構築されます。
デリゲートがインスタンス化されると、デリゲートに対して行われたメソッド呼び出しは、デリゲートによってそのメソッドに渡されます。
呼び出し元によってデリゲートに渡されたパラメータはメソッドに渡され、メソッドからの戻り値 (存在する場合) は、デリゲートによって呼び出し元に返されます。これをデリゲートの呼び出しと言います。
インスタンス化されたデリゲートは、ラップされたメソッドそのもののように呼び出すことができます。
デリゲートの特徴
- デリゲートは、C++ の関数ポインタに似ていますが、タイプ セーフです。
- メソッドをパラメータとして渡すことができます。
- デリゲートは、コールバック メソッドを定義するのに使用できます。
- デリゲートは連結できます(例えば、複数のメソッドを 1 つのイベントで呼び出す)。
- メソッドは、デリゲートのシグネチャに正確に一致する必要がありません。
- C# Version 2.0 では、匿名メソッドという概念を導入し、別個に定義されたメソッドの代わりにコード ブロックをパラメータとして渡すことができます。
メソッドを参照する型です。デリゲートにメソッドを代入すると、デリゲートはそのメソッドとまったく同じように動作します。デリゲート ・メソッドは、パラメータと戻り値を指定して他のメソッドと同じように使用できます。
public delegate int PerformCalculation(int x, int y);
デリゲートのシグネチャ (シグネチャは、戻り値の型とパラメータで構成されます) に一致するメソッドは、デリゲートに代入できます。このため、メソッド呼び出しをプログラムによって変更でき、また新しいコードを既存のクラスに接続することもできます。デリゲートのシグネチャを知っている限り、独自のデリゲート メソッドを割り当てることができます。
このようにメソッドをパラメータとして参照できるため、デリゲートはコールバック メソッドを定義するのに最適です。たとえば、並べ替えアルゴリズムには、2 つのオブジェクトを比較するメソッドへの参照を渡すことができます。比較コードを分離することによって、アルゴリズムをより一般的な形で記述できます。