Megosztás a következőn keresztül:


delegálási operátor

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

Feljegyzé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!

A lambdakifejezések nem támogatják a névtelen metódusok egyetlen funkcióját. 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 delegate deklarálhat deklarált típust is.

A C# 11-től kezdődően a fordító gyorsítótárazhatja 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;

A C# 11 előtt egy lambda kifejezést kell használnia egyetlen delegált objektum újrafelhasználásához:

Action a = () => StaticFunction();

C# nyelvspecifikáció

További információ: A C# nyelv specifikációjának Névtelen függvénykifejezések szakasza.

Lásd még