我想知道有两种方法可以在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();
}
有什么区别吗?
P.S。 我注意到visual studio表单设计器使用“new”关键字(用于事件)生成代码,但是当我从生成的代码中删除它时,它可以工作:
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button1.Click += this.button1_Click;
答案 0 :(得分:5)
有什么不同吗?
没有。两种形式都编译为完全相同的IL。
P.S。我注意到visual studio表单设计器使用“new”关键字(用于事件)生成代码
在旧版本的C#中,需要显式实例化委托。 C#2添加了delegate inference,它允许您直接将方法组分配给委托(或与事件一起使用)。设计师仍然选择在C#2.0之前需要的原始形式,但仍然有效。