Share via


operator voor gedelegeerden

De delegate operator maakt een anonieme methode die kan worden geconverteerd naar een gemachtigde. Een anonieme methode kan worden geconverteerd naar typen, zoals System.Action typen die System.Func<TResult> als argumenten worden gebruikt voor veel methoden.

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

Notitie

Lambda-expressies bieden een beknoptere en expressieve manier om een anonieme functie te maken. Gebruik de operator => om een lambda-expressie samen te stellen:

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

Zie Lambda-expressies voor meer informatie over functies van lambda-expressies, bijvoorbeeld het vastleggen van buitenste variabelen.

Wanneer u de delegate operator gebruikt, kunt u de lijst met parameters weglaten. Als u dit doet, kan de gemaakte anonieme methode worden geconverteerd naar een gemachtigdentype met een lijst met parameters, zoals in het volgende voorbeeld wordt weergegeven:

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!

Dat is de enige functionaliteit van anonieme methoden die niet worden ondersteund door lambda-expressies. In alle andere gevallen is een lambda-expressie een voorkeurswijze om inlinecode te schrijven. U kunt verwijderingen gebruiken om twee of meer invoerparameters op te geven van een anonieme methode die niet door de methode wordt gebruikt:

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

Voor compatibiliteit met eerdere versies wordt, als er slechts één parameter wordt genoemd _, _ behandeld als de naam van die parameter binnen een anonieme methode.

U kunt de static wijzigingsfunctie gebruiken bij de declaratie van een anonieme methode:

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

Een statische anonieme methode kan geen lokale variabelen of instantiestatus vastleggen uit het insluiten van bereiken.

U gebruikt ook het delegate trefwoord om een gemachtigdentype te declareren.

Vanaf C# 11 kan de compiler het gemachtigde object opslaan dat is gemaakt op basis van een methodegroep. Houd rekening met de volgende methode:

static void StaticFunction() { }

Wanneer u de methodegroep toewijst aan een gemachtigde, slaat de compiler de gemachtigde in de cache op:

Action a = StaticFunction;

Voor C# 11 moet u een lambda-expressie gebruiken om één gedelegeerde-object opnieuw te gebruiken:

Action a = () => StaticFunction();

C#-taalspecificatie

Zie de sectie Anonieme functie-expressies van de C#-taalspecificatie voor meer informatie.

Zie ook