可能重复:
C#: Difference between ' += anEvent' and ' += new EventHandler(anEvent)'
在C#.NET 3.5中,编译器不关心我是否这样做(假设ButtonClickHandler是一个函数):
button.OnButtonClicked += ButtonClickHandler;
或:
button.OnButtonClicked += new ButtonClickHandlerDelegate( ButtonClickHandler );
这些功能是否相同?我在下面阅读了stackoverflow问题,但我不确定它是否也适用于这种情况:
The difference between implicit and explicit delegate creation (with and without generics)
答案 0 :(得分:2)
是的,首先是后者的语法糖。编译器只是推断委托的类型并为您构造它。编译器将发出完全相同的IL。
在C#2中添加了第一个更短更清晰的语法(委托推理 - 我建议您将其用于提高可读性) - 这就是为什么有些设计师(也是微软的)倾向于使用<{1}}委托的长而冗长的语法。
实际上,我认为这是this prior question的副本。
答案 1 :(得分:1)
在C#4中,这将生成相同的代码,因此它们在功能上是相同的。 在第一种(较短的)形式中,编译器从方法签名中推断出委托类型,这为您节省了必须明确执行的工作。