Share via


operator voor gedelegeerden

De delegate operator maakt een anonieme methode die u kunt converteren naar een gemachtigdentype.

De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.

De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.

Aanbeveling

Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.

U kunt een anonieme methode converteren naar typen zoals System.Action en System.Func<TResult>. Veel methoden gebruiken deze typen als argumenten.

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, zoals het vastleggen van buitenste variabelen.

Wanneer u de delegate operator gebruikt, kunt u de lijst met parameters weglaten. Als u de lijst met parameters weglaat, maakt u een anonieme methode die u kunt converteren 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!

Deze functionaliteit is de enige functie van anonieme methoden die lambda-expressies niet ondersteunen. In alle andere gevallen gebruikt u een lambda-expressie 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, als er slechts één parameter wordt genoemd _, wordt de compiler behandeld _ als de naam van die parameter binnen een anonieme methode.

Gebruik de static wijzigingsfunctie wanneer u een anonieme methode declareert:

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.

Gebruik het delegate trefwoord om een gemachtigde te declareren.

De compiler kan het gedelegeerde object dat wordt gemaakt, in de cache opslaan 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;

C#-taalspecificatie

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

Zie ook