Freigeben über


Delegat (C#-Referenz)

Die Deklaration eines Delegattyps ist einer Methodensignatur ähnlich. Sie weist einen Rückgabewert und eine beliebige Anzahl Parameter eines beliebigen Typs auf:

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

delegate ist ein Referenztyp, mit dem eine benannte oder anonyme Methode gekapselt werden kann. Delegaten entsprechen den Funktionszeigern in C++, sie sind jedoch typsicher und geschützt. Anwendungsmöglichkeiten von Delegaten finden Sie unter Delegaten und Generische Delegaten.

Hinweise

Delegaten bilden die Grundlage für Ereignisse.

Ein Delegat kann instanziiert werden, indem er entweder einer benannten oder einer anonymen Methode zugeordnet wird. Weitere Informationen finden Sie unter Benannte Methoden und Anonyme Methoden.

Der Delegat muss mit einer Methode oder einem Lambda-Ausdruck instanziiert werden, der einen kompatiblen Rückgabewert und kompatible Eingabeparameter aufweist. Weitere Informationen zum Grad der zulässigen Varianz bei der Methodensignatur finden Sie unter Varianz in Delegaten (C# und Visual Basic). Zur Verwendung mit anonymen Methoden werden der Delegat und der Code, dem er zugeordnet werden soll, zusammen deklariert. Beide Methoden zur Instanziierung von Delegaten werden in diesem Abschnitt erläutert.

Beispiel

// 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: {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#-Programmiersprachenspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Referenz

C#-Schlüsselwörter

Verweistypen (C#-Referenz)

Delegaten (C#-Programmierhandbuch)

Ereignisse (C#-Programmierhandbuch)

Delegaten mit benannten im Vergleich zu anonymen Methoden (C#-Programmierhandbuch)

Anonyme Methoden (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz