繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM