Анонимные методы в 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();
}
}
}
