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 Sie in einen Delegattyp konvertieren können.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
Sie können eine anonyme Methode in Typen wie System.Action und System.Func<TResult>. Viele Methoden verwenden diese Typen als Argumente.
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. das Erfassen äußerer Variablen, finden Sie unter Lambda-Ausdrücke.
Wenn Sie den delegate Operator verwenden, können Sie die Parameterliste weglassen. Wenn Sie die Parameterliste weglassen, erstellen Sie eine anonyme Methode, die Sie mit einer beliebigen Liste von Parametern in einen Delegattyp konvertieren können, wie im folgenden Beispiel gezeigt:
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!
Diese Funktionalität ist das einzige Feature anonymer Methoden, die Lambda-Ausdrücke nicht unterstützen. Verwenden Sie in allen anderen Fällen einen Lambda-Ausdruck, um Inlinecode zu schreiben. 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
Wenn nur ein einzelner Parameter benannt _wird, wird der Compiler aus Gründen der Abwärtskompatibilität innerhalb einer anonymen Methode als Name dieses Parameters behandelt _ .
Verwenden Sie den static Modifizierer, wenn Sie eine anonyme Methode deklarieren:
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.
Verwenden Sie das delegate Schlüsselwort, um einen Delegattyp zu deklarieren.
Der Compiler kann das delegatobjekt zwischenspeichern, das es aus einer Methodengruppe erstellt. Berücksichtigen Sie die folgende Methode:
static void StaticFunction() { }
Wenn Sie der Methodengruppe einen Delegaten zuweisen, speichert der Compiler den Delegaten zwischen:
Action a = StaticFunction;
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt Anonyme Funktionsausdrücke der C#-Sprachspezifikation.