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.