分配给事件时隐式委托分配?

时间:2011-07-11 20:35:24

标签: c# delegates

  

可能重复:
  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)

2 个答案:

答案 0 :(得分:2)

是的,首先是后者的语法糖。编译器只是推断委托的类型并为您构造它。编译器将发出完全相同的IL。

在C#2中添加了第一个更短更清晰的语法(委托推理 - 我建议您将其用于提高可读性) - 这就是为什么有些设计师(也是微软的)倾向于使用<{1}}委托的长而冗长的语法。

实际上,我认为这是this prior question的副本。

答案 1 :(得分:1)

在C#4中,这将生成相同的代码,因此它们在功能上是相同的。 在第一种(较短的)形式中,编译器从方法签名中推断出委托类型,这为您节省了必须明确执行的工作。