Анонимные методы в C# 6.0
Анонимные методы предоставляют метод передачи кода в качестве параметра делегата.
Анонимные методы - это методы без имени, только тела.
Они были введены в C# 2.0, но в основном используются с лямбда выражениями.
Анонимный метод похож на лямбда выражение, за исключением того, что ему не хватает неявно типизированных параметров, синтаксиса выражений и возможности компиляции в дерево выражений.
Вам не нужно указывать тип возврата в анонимном методе; это выводится из оператора return внутри тела метода.
Как работают анонимные методы в C#?
Чтобы написать анонимный метод, вы включаете ключевое слово делегата, за которым следует объявление параметра, а затем тело метода.
delegate int Transformer (int i);
Мы могли бы написать анонимный метод, как показано ниже:
Transformer sqr= delegate (int x) {return x*x; }; Console.WriteLine (sqr(3));
Давайте перепишем его с помощью лямбда-выражения:
Transformer sqr= (int x) => {return x * x ; };
И
Transformer sqr = x => x * x ;
Уникальной особенностью анонимного метода является то, что вы можете опустить параметр, даже если делегат ожидает его.
Это может быть полезно при объявлении событий с пустым обработчиком по умолчанию:
public event EventHandler clicked = delegate {};
Он избегает необходимости нулевой проверки перед запуском события.
Пример:
using System; delegate void NumberChanger(int n); namespace DelegateAppl { class TestDelegate { static int num = 10; public static void AddNum(int p) { num += p; Console.WriteLine("Named Method: {0}", num); } public static void MultNum(int q) { num *= q; Console.WriteLine("Named Method: {0}", num); } public static int getNum() { return num; } static void Main(string[] args) { //создавать экземпляры делегата с использованием анонимного метода NumberChanger nc = delegate(int x) { Console.WriteLine("Anonymous Method: {0}", x); }; //вызов делегата с использованием анонимного метода nc(10); //создание экземпляра делегата с использованием названных методов nc = new NumberChanger(AddNum); //вызов делегата с использованием названных методов nc(5); //создание экземпляра делегата с использованием других именованных методов nc = new NumberChanger(MultNum); //вызов делегата с использованием названных методов nc(2); Console.ReadKey(); } } }