使用"new EventHandler <T>"并且不使用新的EventHandler <T>"的接线事件之间的区别?

Ian*_*Ian 6 c# events

这两者有什么区别?

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);
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

如果没有差异,哪个是更好的选择?

谢谢!

SWe*_*eko 6

基本上,一个比另一个短.它只是同义糖.

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

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

我更喜欢使用第二种方法,因为它更短,并且不会丢失任何信息.没有太多的上下文可以将+= methodName构造误认为是其他东西.


jga*_*fin 5

没有不同.生成相同的ilcode.

至于哪一个更好:我使用第二个选项,因为它更清晰的代码=更容易阅读.