【问题标题】:Difference between wiring events using "new EventHandler<T>" and not using new EventHandler<T>"?使用“new EventHandler<T>”和不使用“new EventHandler<T>”连接事件之间的区别?
【发布时间】:2011-03-29 14:54:55
【问题描述】:

两者有什么区别?

object.ProgressChanged += new EventHandler<ProgressChangedEventArgs>(object_ProgressChanged)

object.ProgressChanged += object_ProgressChanged;

    void installableObject_InstallProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        EventHandler<ProgressChangedEventArgs> progress = ProgressChanged;
        if (installing != null)
            installing(this, e);
    }

编辑:

如果没有区别,哪个是更好的选择?

谢谢!

【问题讨论】:

标签: c# events


【解决方案1】:

基本上,一个比另一个短。这只是句法糖。

“正确”的语法是第一个,因为 ProgresChanged 是一个 EventHandler 事件,所以要给它分配一个实际的处理程序,你需要创建一个新的 EventHandler 对象,它的构造函数将一个参数的名称作为参数具有所需签名的方法。

但是,如果您只指定方法的名称(第二种语法),则会隐式创建 eventHandler 类的实例,并将该实例分配给 ProgressChanged 事件。

我更喜欢使用第二种方法,因为它更短,并且不会丢失任何信息。在很多情况下,您可能会将 += methodName 构造误认为是其他内容。

【讨论】:

    【解决方案2】:

    没有区别。生成相同的 ilcode。

    至于哪个更好:我使用第二个选项,因为它的代码更简洁 = 更易于阅读。

    【讨论】:

      【解决方案3】:

      没有区别。第二个将被编译器隐式转换为第一个。

      【讨论】:

        【解决方案4】:

        两者没有区别,都是一样的。 其实后者只是一个捷径,会和前者一样编译。

        丽安娜

        【讨论】:

          猜你喜欢
          • 2017-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多