Delegate – operátor (Referenční dokumentace jazyka C#)

delegateOperátor vytvoří anonymní metodu, která může být převedena na typ delegáta:

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

Poznámka

Počínaje jazykem C# 3 výrazy lambda poskytují výstižnější a výrazný způsob vytvoření anonymní funkce. Použijte operátor => pro vytvoření výrazu lambda:

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

Další informace o funkcích výrazů lambda, například zachycení vnějších proměnných, naleznete v tématu lambda Expressions.

Při použití delegate operátoru můžete seznam parametrů vynechat. Pokud to uděláte, můžete vytvořenou anonymní metodu převést na typ delegáta s libovolným seznamem parametrů, jak ukazuje následující příklad:

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!

To je jediná funkce anonymních metod, které výrazy lambda nepodporují. Ve všech ostatních případech je výraz lambda upřednostňovaným způsobem, jak psát vložený kód.

Počínaje jazykem C# 9,0 můžete použít možnost Discard k zadání dvou nebo více vstupních parametrů anonymní metody, které nejsou používány metodou:

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

V případě zpětné kompatibility, je-li pouze jeden parametr pojmenován _ , _ je považován za název tohoto parametru v rámci anonymní metody.

Počínaje jazykem C# 9,0 můžete použít static Modifikátor v deklaraci anonymní metody:

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

Statická anonymní metoda nemůže zachytit místní proměnné nebo stav instance z ohraničujících oborů.

Pomocí delegate klíčového slova také deklarujete typ delegáta.

specifikace jazyka C#

Další informace naleznete v části výrazy anonymní funkce specifikace jazyka C#.

Viz také