C#:“ + = anEvent”和“ + = new EventHandler(anEvent)”之间的区别


76

采取以下代码:

private void anEvent(object sender, EventArgs e) {
    //some code
}

以下之间有什么区别?

[object].[event] += anEvent;

//and

[object].[event] += new EventHandler(anEvent);

[更新]

显然,两者之间没有区别……前者只是后者的语法糖。


4
像Resharper这样的工具会建议您删除多余的代码,因为它只会增加噪音。
克里斯·马里西克


第一行只能由经验丰富的C#程序员理解。经验丰富的C#程序员和新手都可以理解第二行。
CJ丹尼斯

@CJDennis-我明白你的意思,但这是一个可能的反驳:最好使用新人(几乎总是)遇到的事件范例。否则,他们将以另一种方式感到困惑:想知道为什么有时他们看到代码说“ new EventHandler”,而有时却看不到。
ToolmakerSteve

Answers:


81

没有区别。在第一个示例中,编译器将自动推断您要实例化的委托。在第二个示例中,您显式定义了委托。

委派推理已在C#2.0中添加。因此,对于C#1.0项目,第二个示例是您唯一的选择。对于2.0项目,使用推理的第一个示例是我更喜欢在代码库中使用和看到的示例-因为它更简洁。



11

我认为没有区别。编译器将第一个转换为第二个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.