什么是这种类型的委托(C#)

时间:2012-12-03 15:35:57

标签: c# .net delegates anonymous-delegates

我有这些代码。

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 个答案:

答案 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返回方法。