分配C#事件处理程序的差异?

时间:2009-08-25 08:20:22

标签: c# events event-handling

我总是在Intellisense自动完成的指导下分配这样的事件处理程序。

RangeSelector.RangeChanged += new EventHandler(RangeSelector_RangeChanged);

我最近注意到我的一位同事就是这样做的。

RangeSelector.RangeChanged += RangeSelector_RangeChanged;

两种方法在语法上都是正确的,编译和行为符合预期。

这些方法的不同之处,好处或缺点是什么。它们是否会产生相同的IL代码,或者是否需要注意一些细微差别?

4 个答案:

答案 0 :(得分:12)

  

这些方法的不同之处,好处或缺点是什么。

第二种方法比较新,即只支持C#2.0(我相信),它增加了从方法组(即方法名称)到委托的自动转换。因此构造函数调用由编译器添加,第二种方法只是第一种方法的语法糖。

因此,两者之间没有其他区别。

由于第二种方法与第一种方法相同,语法较少,因此应该首选。

答案 1 :(得分:3)

没有区别,它导致相同的IL。

这只是一种用较少代码说同样事情的方法。

答案 2 :(得分:3)

两种情况下的结果相同。但在后者中,C#编译器将从代码中推断出EventHandler类型,从而为您节省了一些关键笔划。

答案 3 :(得分:2)

是的,编译器在两种情况下都会创建相同的IL代码,第二种情况只是语法糖