【问题标题】:Implicit delegate allocation when assigning to events? [duplicate]分配给事件时的隐式委托分配? [复制]
【发布时间】:2011-07-11 20:35:23
【问题描述】:

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

【问题讨论】:

  • 我投票结束我自己的问题,因为我无法删除它。 stackoverflow 的搜索很糟糕,所以我当然找不到你们链接的任何有用的问题。

标签: c# delegates


【解决方案1】:

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

在 C#2 中添加了第一个更短且更简洁的语法(delegate inference - 我建议您使用它以提高可读性) - 这就是为什么一些设计师(也是微软的)倾向于使用newing 委托的冗长且更冗长的语法。

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

【讨论】:

  • 抱歉重复。使用 stackoverflow 的搜索找到类似的问题真是让人头疼。
  • 其实想一想,我相信你的问题比上一个问题要好——搜索相同问题的人会更容易找到,因为它在标题中包含更多相关词( 委托隐式,即)。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2013-12-25
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多