Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az delegate operátor létrehoz egy névtelen metódust, amely delegált típussá alakítható. A névtelen metódusok átalakíthatók olyan típusokra, mint például System.Action az System.Func<TResult> argumentumként használt típusok számos metódusra.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
Megjegyzés:
A Lambda-kifejezések tömörebb és kifejezőbb módot biztosítanak egy névtelen függvény létrehozásához. A => operátorral lambdakifejezést hozhat létre:
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4)); // output: 7
A lambdakifejezések funkcióiról, például a külső változók rögzítéséről további információt a Lambda-kifejezésekben talál.
Az operátor használatakor delegate kihagyhatja a paraméterlistát. Ha így tesz, a létrehozott névtelen metódus bármilyen paraméterlistával delegált típussá alakítható, ahogyan az alábbi példa is mutatja:
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!
Ez a lambdakifejezések által nem támogatott névtelen metódusok egyetlen funkciója. Minden más esetben a lambda kifejezés a beágyazott kódok írásának előnyben részesített módja. Elvetésekkel megadhat két vagy több olyan bemeneti paramétert egy névtelen metódushoz, amelyeket a metódus nem használ:
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4)); // output: 42
A visszamenőleges kompatibilitás érdekében, ha csak egyetlen paraméter neve van elnevezve _, _ a rendszer a paraméter neveként kezeli egy névtelen metóduson belül.
A módosító egy static névtelen metódus deklarálásánál használható:
Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4)); // output: 14
A statikus névtelen metódusok nem tudják rögzíteni a helyi változókat vagy a példány állapotát a hatókörökből.
A kulcsszóval delegatedeklarálhat deklarált típust is.
A fordító gyorsítótárazza a metóduscsoportból létrehozott delegált objektumot. Fontolja meg a következő módszert:
static void StaticFunction() { }
Amikor hozzárendeli a metóduscsoportot egy meghatalmazotthoz, a fordító gyorsítótárazza a meghatalmazottat:
Action a = StaticFunction;
C# nyelvspecifikáció
További információkért lásd a Névtelen függvénykifejezések szakaszt a C# nyelvi specifikációban.