delegate (C# リファレンス)delegate (C# Reference)

デリゲート型の宣言は、メソッド シグネチャに似ています。The declaration of a delegate type is similar to a method signature. 戻り値 1 つのほか、任意の型のパラメーターをいくつでも指定することができます。It has a return value and any number of parameters of any type:

public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);

delegate は、名前付きメソッドまたは匿名メソッドをカプセル化することができる参照型です。A delegate is a reference type that can be used to encapsulate a named or an anonymous method. デリゲートは C++ の関数ポインターに似ていますが、タイプ セーフであり安全です。Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. デリゲートの使い方については、デリゲート汎用デリゲートに関するページを参照してください。For applications of delegates, see Delegates and Generic Delegates.


デリゲートはイベントの土台となる働きをします。Delegates are the basis for Events.

デリゲートは名前付きメソッドまたは匿名メソッドに関連付けることによって、インスタンス化することができます。A delegate can be instantiated by associating it either with a named or anonymous method. 詳細については、名前付きメソッド匿名メソッドに関するページを参照してください。For more information, see Named Methods and Anonymous Methods.

デリゲートは、適合する入力パラメーターと戻り値の型を持ったメソッドまたはラムダ式でインスタンス化する必要があります。The delegate must be instantiated with a method or lambda expression that has a compatible return type and input parameters. メソッドのシグネチャでどの程度の変性が許容されるかについて詳しくは、デリゲートの変性に関するページを参照してください。For more information on the degree of variance that is allowed in the method signature, see Variance in Delegates. 匿名メソッドで使用する場合は、デリゲートとそれに関連付けるコードとを一緒に宣言します。For use with anonymous methods, the delegate and the code to be associated with it are declared together. このセクションでは、その両方の方法でデリゲートをインスタンス化しています。Both ways of instantiating delegates are discussed in this section.


// Declare delegate -- defines required signature:
delegate double MathAction(double num);

class DelegateTest
    // Regular method that matches signature:
    static double DoubleAmount(double input)
        return input * 2;

    static void Main()
        // Instantiate delegate with named method:
        MathAction ma = DoubleAmount;

        // Invoke delegate ma:
        double multByTwo = ma(4.5);
        Console.WriteLine("multByTwo: {0}", multByTwo);

        // Instantiate delegate with anonymous method:
        MathAction ma2 = delegate(double input)
            return input * input;

        double square = ma2(5);
        Console.WriteLine("square: {0}", square);

        // Instantiate delegate with lambda expression
        MathAction ma3 = s => s * s * s;
        double cube = ma3(4.375);

        Console.WriteLine("cube: {0}", cube);
    // Output:
    // multByTwo: 9
    // square: 25
    // cube: 83.740234375

C# 言語仕様C# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also