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

Ste*_*ane 7 c# events event-handling

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

RangeSelector.RangeChanged += new EventHandler(RangeSelector_RangeChanged);
Run Code Online (Sandbox Code Playgroud)

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

RangeSelector.RangeChanged += RangeSelector_RangeChanged;
Run Code Online (Sandbox Code Playgroud)

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

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

Kon*_*lph 12

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

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

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

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

  • +1,但至于"应该优先"这是值得怀疑的.如果键入+ =然后按两次选项卡按钮会生成更新的语法,我同意.目前,添加事件处理程序的最快方法是使用IDE帮助生成较旧的语法. (2认同)