你能告诉我这些附加事件处理程序的方法之间有什么区别吗?
//Method 1
this.button4.Click += new RoutedEventHandler(button4_Click);
//Method 2
this.button4.Click += button4_Click;
...
void button4_Click(object sender, RoutedEventArgs e) { }
答案 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更适用于手头的情况