使用 "new EventHandler<T>" 和不使用 "new EventHandler<T>" 有什么区别?该怎么选择?

6
这两者有何区别?
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);
    }

编辑:

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

谢谢!


1
第一个比另一个长... - Stefan Steinegger
1
这个问题以前已经有答案了。https://dev59.com/i3E85IYBdhLWcg3wgDlI - Joel Lee
可能是Should I instantiate a new delegate or not?的重复问题。 - nawfal
4个回答

6

基本上,第二种方法比第一种短,只是语法糖而已。

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

但是,如果你只指定方法的名称(第二种语法),事件处理程序类的一个实例会被隐式创建,并将该实例分配给ProgressChanged事件。

我更喜欢使用第二种方法,因为它更短,并且不会丢失任何信息。在很少出现可能会将+= methodName结构误认为其他东西的情况。


5

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

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


3

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


0

这两者之间没有区别,它们是相同的。 实际上,后者只是一个快捷方式,它将像前者一样被编译。

Riana


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接