Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Operator delegate tworzy anonimową metodę, którą można przekonwertować na typ delegata.
Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.
Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.
Wskazówka
Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.
Możesz przekonwertować metodę anonimową na typy, takie jak System.Action i System.Func<TResult>. Wiele metod używa tych typów jako argumentów.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
Uwaga / Notatka
Wyrażenia lambda zapewniają bardziej zwięzły i ekspresyjny sposób tworzenia funkcji anonimowej. Użyj operatora =>, aby utworzyć wyrażenie lambda:
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4)); // output: 7
Aby uzyskać więcej informacji na temat funkcji wyrażeń lambda, takich jak przechwytywanie zmiennych zewnętrznych, zobacz Wyrażenia lambda.
Jeśli używasz delegate operatora, możesz pominąć listę parametrów. Jeśli pominięto listę parametrów, utworzysz anonimową metodę, którą można przekonwertować na typ delegata z dowolną listą parametrów, jak pokazano w poniższym przykładzie:
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!
Ta funkcja jest jedyną funkcją metod anonimowych, które wyrażenia lambda nie obsługują. We wszystkich innych przypadkach użyj wyrażenia lambda, aby napisać kod wbudowany. Można użyć odrzuconych , aby określić co najmniej dwa parametry wejściowe metody anonimowej, której metoda nie używa:
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4)); // output: 42
W przypadku zgodności z poprzednimi wersjami, jeśli tylko jeden parametr ma nazwę _, kompilator traktuje _ jako nazwę tego parametru w metodzie anonimowej.
static Użyj modyfikatora podczas deklarowania metody anonimowej:
Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4)); // output: 14
Statyczna metoda anonimowa nie może przechwytywać zmiennych lokalnych ani stanu wystąpienia z ujęć zakresów.
Użyj słowa kluczowego , delegate aby zadeklarować typ delegata.
Kompilator może buforować obiekt delegata tworzony na podstawie grupy metod. Rozważmy następującą metodę:
static void StaticFunction() { }
Po przypisaniu grupy metod do delegata kompilator buforuje delegata:
Action a = StaticFunction;
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję Anonimowe wyrażenia funkcji specyfikacji języka C# .