Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор delegate создает анонимный метод, который можно преобразовать в тип делегата.
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
Анонимный метод можно преобразовать в такие типы, как System.Action и System.Func<TResult>. Многие методы используют эти типы в качестве аргументов.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
Замечание
Лямбда-выражения предоставляют более краткий и экспрессивный способ создания анонимной функции. Используйте оператор => для создания лямбда-выражения:
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4)); // output: 7
Дополнительные сведения о функциях лямбда-выражений, таких как захват внешних переменных, см. в лямбда-выражениях.
При использовании delegate оператора можно опустить список параметров. Если список параметров опущен, вы создадите анонимный метод, который можно преобразовать в тип делегата с любым списком параметров, как показано в следующем примере:
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!
Эта функция является единственной функцией анонимных методов, которые лямбда-выражения не поддерживают. Во всех остальных случаях используйте лямбда-выражение для написания встроенного кода. С помощью отмены можно указать два или более входных параметров анонимного метода, который метод не использует:
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4)); // output: 42
Для обратной совместимости, если именуется _только один параметр, компилятор обрабатывает _ его как имя этого параметра в анонимном методе.
static Используйте модификатор при объявлении анонимного метода:
Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4)); // output: 14
Статический анонимный метод не может записывать локальные переменные или состояние экземпляра из вложенных областей.
Используйте ключевое delegate слово для объявления типа делегата.
Компилятор может кэшировать объект делегата, который он создает из группы методов. Рассмотрим следующий метод.
static void StaticFunction() { }
При назначении группы методов делегату компилятор кэширует делегат:
Action a = StaticFunction;
Спецификация языка C#
Дополнительные сведения см. в разделе Анонимные выражения функций спецификации языка C#.