1

我想知道在 C# 中有两种使用委托的方法,使用“new”关键字和不使用:

delegate void D(string value);    
static void Main()
{
    D d1 = new D(v => Console.WriteLine(v));  // 1
    D d2 =       v => Console.WriteLine(v);   // 2
    d1.Invoke("cat");
    d2.Invoke("cat");
    Console.ReadLine();
}

有什么区别吗?

PS我注意到Visual Studio表单设计器使用“new”关键字(用于事件)生成代码,但是当我(从生成的代码中)删除它时,它可以工作:

        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.button1.Click += this.button1_Click;
4

1 回答 1

6

有什么区别吗?

不,两种形式都编译为完全相同的 IL。

PS我注意到Visual Studio表单设计器生成带有“new”关键字的代码(用于事件)

在旧版本的 C# 中,需要显式实例化委托。C# 2 添加了委托推断,它允许您将方法组直接分配给委托(或与事件一起使用)。设计者仍然选择原始形式,这是 C# 2.0 之前的要求,但仍然有效。

于 2013-11-13T00:39:10.700 回答