使用“new EventHandler <t>”并且不使用新的EventHandler <t>“接线事件之间的区别?</t> </t>

时间:2011-03-29 06:46:25

标签: 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);
    }

编辑:

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

谢谢!

4 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

两者没有区别,它们是相同的。 事实上,后者只是一个捷径,它将像前者一样编译。

Riana