Es ist eine viel präzisere Form der Methodennotation. Folgendes ist ungefähr gleichwertig:
int MyFunc(int pParam) {
return pParam;
}
Func<int, int> MyFunc = delegate (int pParam) { return pParam; };
Func<int, int> MyFunc = x => x;
int MyFunc(int pParam) =>
pParam;
Stellen Sie sich einen Lambda-Ausdruck vor, der sagt: "Etwas gegeben, etwas zurückgeben". Im obigen Beispiel x => xsagt der Lambda-Ausdruck "gegebenes x, gib x zurück", obwohl Lambda-Ausdrücke nicht unbedingt etwas zurückgeben müssen. In diesem Fall könnten Sie sie als "gegebenes x, mach etwas mit x" lesen.
Beachten Sie auch, dass es drei Dinge gibt, die als "Delegierter" bezeichnet werden und zunächst sehr verwirrend sein können.
Eine anonyme Methode verwendet das delegateSchlüsselwort, definiert jedoch eine Methode ohne Namen:
Func<int, int> = delegate (int x) { return x; };
Durch das Zuweisen einer Methode (anonym, explizit oder Lambda) zu einer Referenz wird ein verstecktes DelegateWrapper-Objekt erstellt, mit dem auf die Methode verwiesen werden kann. (Grundsätzlich eine Art "verwalteter Funktionszeiger".)
Und dann können Sie auch erklären benannte Methode Signaturen die Verwendung von delegateSchlüsselwort auch:
public delegate int TestFunc(int x, int y);
TestFunc myFunc = delegate (int x, int y) { return x + y; };
Dies deklariert eine benannte Signatur TestFunc, die zwei intSekunden benötigt und eine zurückgibt int, und deklariert dann eine Delegatenreferenz dieses Typs, der dann eine anonyme Methode mit übereinstimmender Signatur zugewiesen wird.