delegate (C# リファレンス)
更新 : 2007 年 11 月
デリゲート型の宣言は、メソッド シグネチャに似ています。戻り値と任意の数のパラメータ (任意の型) を持ちます。
public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);
delegate は、指定されたメソッドまたは匿名メソッドをカプセル化するために使用される参照型です。デリゲートは C++ の関数ポインタに類似していますが、タイプ セーフであり、安全です。デリゲートの適用については、「デリゲート (C# プログラミング ガイド)」および「汎用デリゲート (C# プログラミング ガイド)」を参照してください。
解説
デリゲートは、イベントの基礎になります。
デリゲートをインスタンス化するには、デリゲートに指定されたメソッドまたは匿名メソッドを関連付けます。詳細については、「名前付きメソッド (C# プログラミング ガイド)」および「匿名メソッド (C# プログラミング ガイド)」を参照してください。
デリゲートは、互換性のある戻り値の型と入力パラメータを持つメソッドまたはラムダ式でインスタンス化する必要があります。メソッド シグネチャで許容される範囲の詳細については、「デリゲートの共変性と反変性 (C# プログラミング ガイド)」を参照してください。匿名メソッドで使用する場合、デリゲートおよびデリゲートと関連付けるコードを共に宣言します。デリゲートをインスタンス化するこの 2 つの方法について説明します。
使用例
// Declare delegate -- defines required signature:
delegate double MathAction(double num);
class DelegateTest
{
// Regular method that matches signature:
static double Double(double input)
{
return input * 2;
}
static void Main()
{
// Instantiate delegate with named method:
MathAction ma = Double;
// Invoke delegate ma:
double multByTwo = ma(4.5);
Console.WriteLine(multByTwo);
// Instantiate delegate with anonymous method:
MathAction ma2 = delegate(double input)
{
return input * input;
};
double square = ma2(5);
Console.WriteLine(square);
// Instantiate delegate with lambda expression
MathAction ma3 = s => s * s * s;
double cube = ma3(4.375);
Console.WriteLine(cube);
}
}
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
1.11 デリゲート
15 デリゲート
参照
概念
参照
名前付きメソッドを使用したデリゲートと匿名メソッドを使用したデリゲート (C# プログラミング ガイド)