Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Operatorn delegate skapar en anonym metod som du kan konvertera till en ombudstyp.
C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.
Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.
Tips/Råd
Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.
Du kan konvertera en anonym metod till typer som System.Action och System.Func<TResult>. Många metoder använder dessa typer som argument.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
Anmärkning
Lambda-uttryck ger ett mer kortfattat och uttrycksfullt sätt att skapa en anonym funktion. Använd operatorn => för att konstruera ett lambda-uttryck:
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4)); // output: 7
Mer information om funktioner i lambda-uttryck, till exempel att samla in yttre variabler, finns i Lambda-uttryck.
När du använder operatorn delegate kan du utelämna parameterlistan. Om du utelämnar parameterlistan skapar du en anonym metod som du kan konvertera till en ombudstyp med valfri lista med parametrar, som följande exempel visar:
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!
Den här funktionen är den enda funktionen för anonyma metoder som lambda-uttryck inte stöder. I alla andra fall använder du ett lambda-uttryck för att skriva infogad kod. Du kan använda ignorera för att ange två eller flera indataparametrar för en anonym metod som metoden inte använder:
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4)); // output: 42
För bakåtkompatibilitet, om endast en enskild parameter heter _, behandlar _ kompilatorn som namnet på parametern i en anonym metod.
static Använd modifieraren när du deklarerar en anonym metod:
Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4)); // output: 14
En statisk anonym metod kan inte samla in lokala variabler eller instanstillstånd från omfång.
Använd nyckelordet delegate för att deklarera en ombudstyp.
Kompilatorn kan cachelagrat det ombudsobjekt som skapas från en metodgrupp. Tänk på följande metod:
static void StaticFunction() { }
När du tilldelar metodgruppen till ett ombud cachelagrar kompilatorn ombudet:
Action a = StaticFunction;
Språkspecifikation för C#
Mer information finns i avsnittet Anonyma funktionsuttryck i C#-språkspecifikationen.