在C#中使用委托的两种方式有什么区别(使用new关键字和不使用)

Ast*_*tor 1 c# delegates

我想知道有两种方法在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();
}
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?

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

        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.button1.Click += this.button1_Click;
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 5

有什么区别吗?

两个表格都编译为完全相同的IL.

PS我注意到visual studio表单设计器生成带有"new"关键字的代码(用于事件)

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