我总是在Intellisense自动完成的指导下分配这样的事件处理程序。
RangeSelector.RangeChanged += new EventHandler(RangeSelector_RangeChanged);
我最近注意到我的一位同事就是这样做的。
RangeSelector.RangeChanged += RangeSelector_RangeChanged;
两种方法在语法上都是正确的,编译和行为符合预期。
这些方法的不同之处,好处或缺点是什么。它们是否会产生相同的IL代码,或者是否需要注意一些细微差别?
答案 0 :(得分:12)
这些方法的不同之处,好处或缺点是什么。
第二种方法比较新,即只支持C#2.0(我相信),它增加了从方法组(即方法名称)到委托的自动转换。因此构造函数调用由编译器添加,第二种方法只是第一种方法的语法糖。
因此,两者之间没有其他区别。
由于第二种方法与第一种方法相同,语法较少,因此应该首选。
答案 1 :(得分:3)
没有区别,它导致相同的IL。
这只是一种用较少代码说同样事情的方法。
答案 2 :(得分:3)
两种情况下的结果相同。但在后者中,C#编译器将从代码中推断出EventHandler类型,从而为您节省了一些关键笔划。
答案 3 :(得分:2)
是的,编译器在两种情况下都会创建相同的IL代码,第二种情况只是语法糖