我有这些代码。
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(); };
。
当然它不能被称为匿名方法,因为这里我有一个命名方法。
答案 0 :(得分:9)
它被称为Anonymous method
当然它不能被称为匿名方法,因为这里我有一个命名方法
它仍然是一个匿名方法,正如@Daniel在评论中指出的那样,你通过分配一个具有相同签名的方法来实例化printer
委托的实例(恰好是......一个匿名的方法)。您可以完全避免使用匿名方法:
Printer del = Method;
答案 1 :(得分:5)
这是一个匿名委托,其唯一的功能恰好是调用命名方法。
答案 2 :(得分:1)
这是一种匿名方法,正如其他人所说的那样。
您也可以使用此代码完成相同的操作:
Action del = () => Method();
del();
这样,您无需定义delegate
并使用内置的Action
类型。
答案 3 :(得分:1)
这是一种匿名方法。该方法的内部确实调用了一个命名的,但这并没有改变outher方法是匿名的这一事实。
当你展开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返回方法。