デリゲートは、特定のパラメーター リストと戻り値の型を持つメソッドへの参照を表す型です。 デリゲートをインスタンス化するときに、互換性のあるシグネチャと戻り値の型を持つ任意のメソッドにデリゲート インスタンスを関連付けることができます。 デリゲート インスタンスを介してメソッドを呼び出す (または呼び出す) ことができます。
デリゲートは、メソッドを引数として他のメソッドに渡すために使用されます。 イベント ハンドラーは、基本的にデリゲートを介して呼び出すメソッドです。 カスタム メソッドを作成すると、Windows コントロールなどのクラスで、特定のイベントが発生したときにメソッドを呼び出すことができます。
次の例は、デリゲート宣言を示しています。
public delegate int PerformCalculation(int x, int y);
デリゲート型に一致する任意のアクセス可能なクラスまたは構造体から任意のメソッドをデリゲートに割り当てることができます。 メソッドには、静的メソッドまたはインスタンス メソッドのいずれかを指定できます。 柔軟性により、プログラムによってメソッド呼び出しを変更したり、新しいコードを既存のクラスにプラグインしたりできます。
注
メソッドのオーバーロードのコンテキストでは、メソッドのシグネチャに戻り値は含まれません。 しかしデリゲートのコンテキストでは、シグネチャに戻り値が含まれます。 つまり、メソッドには、デリゲートによって宣言された戻り値の型として互換性のある戻り値の型が必要です。
メソッドをパラメーターとして参照する機能により、デリゲートはコールバック メソッドを定義するのに最適です。 アプリケーション内の 2 つのオブジェクトを比較するメソッドを記述できます。 このメソッドは、並べ替えアルゴリズムのデリゲートで使用できます。 比較コードはライブラリから分離されているため、並べ替えメソッドの方が一般的な場合があります。
関数ポインターは 、呼び出し規則をより詳細に制御する必要がある同様のシナリオをサポートします。 デリゲートに関連付けられているコードは、デリゲート型に追加された仮想メソッドを使用して呼び出されます。 関数ポインターを使用する場合は、さまざまな規則を指定できます。
デリゲートの特性を調べる
デリゲートには、次の特性があります。
- デリゲートを使用すると、メソッドをパラメーターとして渡すことができます。
- デリゲートを使用してコールバック メソッドを定義できます。
- デリゲートは、1 つのイベントで複数のメソッドを呼び出すなど、まとめて連結できます。
- メソッドはデリゲート型と正確に一致する必要はありません。 詳細については、「 デリゲートでの分散の使用」を参照してください。
- ラムダ式は、インライン コード ブロックを記述するより簡潔な方法です。 ラムダ式 (特定のコンテキスト) は、デリゲート型にコンパイルされます。 ラムダ式の詳細については、「 ラムダ式」を参照してください。
関連記事を確認する
デリゲートの詳細については、次の記事を参照してください。
- デリゲートの使用
- 名前付きメソッドを使用したデリゲートと匿名メソッドを使用したデリゲート
- デリゲートの変性の使用
- デリゲートを結合する方法 (マルチキャスト デリゲート)
- デリゲートを宣言、インスタンス化、および使用する方法
C# 言語仕様にアクセスする
言語仕様は、C# の構文と使用法の決定的なソースです。 詳細については、「C# 言語仕様のデリゲート」を参照してください。
関連リンク
.NET