Delegat (C#-Referenz)delegate (C# Reference)

Die Deklaration eines Delegattyps ähnelt einer Methodensignatur.The declaration of a delegate type is similar to a method signature. Er verfügt über einen Rückgabewert und eine beliebige Anzahl Parameter eines beliebigen Typs: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);  

Ein delegate ist ein Verweistyp, der verwendet werden kann, um eine benannte oder anonyme Methode zu kapseln.A delegate is a reference type that can be used to encapsulate a named or an anonymous method. Delegaten entsprechen den Funktionszeigern in C++, sind jedoch typsicher und geschützt.Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. Anwendungsmöglichkeiten von Delegaten finden Sie unter Delegaten und Generische Delegaten.For applications of delegates, see Delegates and Generic Delegates.

HinweiseRemarks

Delegaten bilden die Grundlage für Ereignisse.Delegates are the basis for Events.

Ein Delegat kann instanziiert werden, entweder durch Zuordnen mit einer benannten oder einer anonymen Methode.A delegate can be instantiated by associating it either with a named or anonymous method. Weitere Informationen finden Sie unter Benannte Methoden und Anonyme Methoden.For more information, see Named Methods and Anonymous Methods.

Der Delegat muss mit einer Methode oder einem Lambda-Ausdruck instanziiert werden, der über einen kompatiblen Rückgabetypen und Eingabeparameter verfügt.The delegate must be instantiated with a method or lambda expression that has a compatible return type and input parameters. Weitere Informationen zum Grad der Varianz, der in der Methodensignatur zulässig ist, finden Sie unter Varianz bei Delegaten.For more information on the degree of variance that is allowed in the method signature, see Variance in Delegates. Für die Verwendung mit anonymen Methoden werden der Delegat und der Code, der mit ihm zugeordnet werden soll, zusammen deklariert.For use with anonymous methods, the delegate and the code to be associated with it are declared together. Beide Methoden zur Instanziierung von Delegaten werden in diesem Abschnitt erläutert.Both ways of instantiating delegates are discussed in this section.

BeispielExample

// 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#-ProgrammiersprachenspezifikationC# Language Specification

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

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
VerweistypenReference Types
DelegatenDelegates
EreignisseEvents
Delegate mit benannten im Vergleich zu anonymen MethodenDelegates with Named vs. Anonymous Methods
Anonyme MethodenAnonymous Methods