Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der delegate
Operator erstellt eine anonyme Methode, die in einen Delegattyp konvertiert werden kann. Eine anonyme Methode kann in Typen wie z System.Action . B. und System.Func<TResult> Typen konvertiert werden, die als Argumente in viele Methoden verwendet werden.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
Hinweis
Lambda-Ausdrücke bieten eine präzisere und ausdrucksvollere Möglichkeit, eine anonyme Funktion zu erstellen. Verwenden Sie den Operator => zum Erstellen eines Lambda-Ausdrucks:
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4)); // output: 7
Weitere Informationen zu Features von Lambda-Ausdrücken, z. B. zum Erfassen äußerer Variablen, finden Sie unter Lambda-Ausdrücke.
Wenn Sie den delegate
Operator verwenden, können Sie die Parameterliste weglassen. Wenn Sie dies tun, kann die erstellte anonyme Methode mit einer beliebigen Liste von Parametern in einen Delegattyp konvertiert werden, wie das folgende Beispiel zeigt:
Action greet = delegate { Console.WriteLine("Hello!"); };
greet();
Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);
// Output:
// Hello!
// This is world!
Dies ist die einzige Funktionalität anonymer Methoden, die von Lambda-Ausdrücken nicht unterstützt werden. In allen anderen Fällen ist ein Lambda-Ausdruck eine bevorzugte Methode zum Schreiben von Inlinecode. Sie können Verworfen verwenden, um zwei oder mehr Eingabeparameter einer anonymen Methode anzugeben, die von der Methode nicht verwendet wird:
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4)); // output: 42
Aus Gründen der Abwärtskompatibilität wird, wenn nur ein einzelner Parameter benannt _
wird, _
als Name dieses Parameters innerhalb einer anonymen Methode behandelt.
Sie können den static
Modifizierer bei der Deklaration einer anonymen Methode verwenden:
Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4)); // output: 14
Eine statische anonyme Methode kann keine lokalen Variablen oder den Instanzzustand aus dem Einschließen von Bereichen erfassen.
Sie verwenden auch das delegate
Schlüsselwort, um einen Delegattyp zu deklarieren.
Ab C# 11 kann der Compiler das aus einer Methodengruppe erstellte Delegatenobjekt zwischenspeichern. Berücksichtigen Sie die folgende Methode:
static void StaticFunction() { }
Wenn Sie die Methodengruppe einem Delegaten zuweisen, speichert der Compiler den Delegaten zwischen:
Action a = StaticFunction;
Vor C# 11 müssen Sie einen Lambda-Ausdruck verwenden, um ein einzelnes Delegatobjekt wiederzuverwenden:
Action a = () => StaticFunction();
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt Anonyme Funktionsausdrücke der C#-Sprachspezifikation.