Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
Opmerking
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 Anonieme functie-expressies sectie van de C#-taalspecificatievoor meer informatie.