分配事件有什么不同......正确的方法?

时间:2009-01-29 17:12:49

标签: c# events click delegates new-operator

你能告诉我这些附加事件处理程序的方法之间有什么区别吗?

//Method 1
this.button4.Click += new RoutedEventHandler(button4_Click);

//Method 2
this.button4.Click += button4_Click;

...

void button4_Click(object sender, RoutedEventArgs e) { }

3 个答案:

答案 0 :(得分:3)

正如安东所说,没有区别。

就像更多背景,这不是特定于事件。这只是C#2.0中一个功能的用法,它是方法组到委托的隐式转换。所以你可以像这样使用它:

EventHandler handler = button4_click;

对C#2.0中委托的另一个改变是它们现在是变体 - 这意味着(例如)你可以使用用EventHander签名声明的方法作为MouseEventHandler:

MouseEventHandler handler = button4_click;

然后当然有匿名方法,但这是一个完全不同的球赛:)

答案 1 :(得分:1)

没有任何区别 - 第二个是C#2.0中添加的语法糖。在C#3.0中,lambdas更加简洁。

答案 2 :(得分:1)

确实是语法糖(它编译成相同的CIL)

第一种方法的好处是它在呼叫站点显示您正在使用的事件类型。

第二个好处是,如果委托类型更改但保持兼容,则代码不需要更改,如果更改但不兼容,则只需修复方法,而不是它附加到事件的位置。 / p>

与以往一样,这是一个平衡,哪个pro / con更适用于手头的情况