Как называется этот тип делегата (C#)
У меня есть эти строки кода.
class Program
{
public delegate void printer();
public static void Method()
{
Console.WriteLine("Hello");
}
static void Main(string[] args)
{
printer del = delegate { Method(); };
del();
Console.ReadKey();
}
}
Теперь, что я называю это утверждение printer del = delegate { Method(); };
,
Конечно, это нельзя назвать анонимным методом, потому что здесь у меня есть именованный метод.
4 ответа
Это анонимный делегат, единственная функция которого вызывает именованный метод.
Это называется анонимный метод
Конечно, это нельзя назвать анонимным методом, потому что здесь у меня есть именованный метод
Это все еще анонимный метод, так как @Daniel указал в комментариях, что вы делаете, создавая экземпляр printer
делегировать, назначая метод с той же сигнатурой (который оказывается... анонимным методом). Вы можете полностью избежать использования анонимного метода, выполнив:
Printer del = Method;
Это анонимный метод. Внутри метода вызывается именованный метод, но это не меняет того факта, что внешний метод является анонимным.
Вы можете легко увидеть это, когда развернете del:
class Program
{
public delegate void printer();
public static void MethodA()
{
Console.WriteLine("Hello");
}
public static void MethodB()
{
Console.WriteLine("World");
}
static void Main(string[] args)
{
bool x = true;
printer del = delegate
{
if (x)
{
MethodA();
}
else
{
MethodB();
}
};
del();
Console.ReadKey();
}
}
Если вы не хотите использовать делегата, вы можете сделать то же самое с действием:
Action delA = () => MethodA();
delA();
Action
указывает на метод возврата void, который не принимает параметров.
Это анонимный метод, как сказали другие.
Вы также можете сделать то же самое с этим кодом:
Action del = () => Method();
del();
Таким образом, вам не нужно определять delegate
и использовать встроенный Action
тип.