[英]What is this type of delegate called(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(); };
printer del = delegate { Method(); };
.
当然它不能被称为匿名方法,因为这里我有一个命名方法。
它被称为匿名方法
当然不能称为匿名方法,因为这里我有一个命名方法
它仍然是一种匿名方法,正如@Daniel 在评论中指出的那样,您所做的是通过分配具有相同签名的方法(恰好是...匿名方法)来实例化printer
委托的实例。 您可以通过执行以下操作来完全避免使用匿名方法:
Printer del = Method;
这是一个匿名委托,其唯一的函数恰好是调用命名方法。
正如其他人所说,这是一种匿名方法。
您也可以使用以下代码完成相同的操作:
Action del = () => Method();
del();
这样,您就不需要定义delegate
并使用内置的Action
类型。
这是一种匿名方法。 该方法的内部确实调用了一个命名方法,但这并没有改变外部方法是匿名的这一事实。
当您展开 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 执行相同的操作:
Action delA = () => MethodA();
delA();
Action
指向一个不带参数的 void 返回方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.