【问题标题】:What is Difference in assign an event...the correct method?分配事件的区别是什么……正确的方法?
【发布时间】:2009-01-29 17:12:48
【问题描述】:
你能告诉我这些附加事件处理程序的方法有什么区别吗?
//Method 1
this.button4.Click += new RoutedEventHandler(button4_Click);
//Method 2
this.button4.Click += button4_Click;
...
void button4_Click(object sender, RoutedEventArgs e) { }
【问题讨论】:
标签:
c#
events
click
delegates
new-operator
【解决方案1】:
正如安东所说,没有区别。
作为更多背景知识,这并不特定于事件。这只是 C# 2.0 中该功能的一种用途,即方法组到委托的隐式转换。所以你也可以像这样使用它:
EventHandler handler = button4_click;
C# 2.0 中委托的另一个变化是它们现在是变体 - 这意味着(例如)您可以使用使用 EventHander 签名声明的方法作为 MouseEventHandler:
MouseEventHandler handler = button4_click;
当然还有匿名方法,但那是完全不同的球赛:)
【解决方案2】:
没有任何区别 - 第二个只是在 C# 2.0 中添加的语法 shugar。而在 C# 3.0 中,lambda 表达式更加简洁。
【解决方案3】:
它确实是语法糖(它编译成相同的 CIL)
第一种方法的好处是它在调用站点上明确说明您正在使用什么事件类型。
第二个的好处是,如果委托类型改变但保持兼容,则代码不需要改变,如果它改变但不兼容,你只需要修复方法,而不是它附加到事件的位置。
与以往一样,这是一种平衡,即哪个赞成/反对更适合当前的情况