0

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

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

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

...

void button4_Click(object sender, RoutedEventArgs e) { }
4

3 回答 3

3

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

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

EventHandler handler = button4_click;

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

MouseEventHandler handler = button4_click;

当然还有匿名方法,但那是完全不同的球赛:)

于 2009-01-29T17:29:05.957 回答
1

没有任何区别 - 第二个只是在 C# 2.0 中添加的语法 shugar。而在 C# 3.0 中,lambda 表达式更加简洁。

于 2009-01-29T17:14:48.777 回答
1

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

第一种方法的好处是它在调用站点上明确说明您正在使用什么事件类型。

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

与以往一样,这是一种平衡,哪个赞成/反对更适合手头的情况

于 2009-01-29T17:35:57.097 回答