采取以下代码:
private void anEvent(object sender, EventArgs e) {
//some code
}
以下有什么区别?
[object].[event] += anEvent;
//and
[object].[event] += new EventHandler(anEvent);
[更新]
显然,两者之间没有区别......前者只是后者的语法糖。
没有区别。在您的第一个示例中,编译器将自动推断您想要实例化的委托。在第二个示例中,您显式定义了委托。
C# 2.0 中添加了委托推理。因此,对于 C# 1.0 项目,第二个示例是您唯一的选择。对于 2.0 项目,第一个使用推理的例子是我更喜欢在代码库中使用和看到的——因为它更简洁。
[object].[event] += anEvent;
只是 -
的语法糖[object].[event] += new EventHandler(anEvent);
我不认为有什么不同。编译器将第一个转换为第二个。
对于新手,我试图简单地解释一下这两种用法是一回事。当我们查看它的声明时,我们通过将鼠标指针悬停在
+
或 =+
EventHandler
的运算符上得到以下内容。
EventHandler EventHandler.operator +(EventHandler left, EventHandler right)
从现在开始我们很确定这是一种operator overloading,也就是
+
,同时不知道它的实现细节。此时,我们可以利用ILSpy显示重载运算符以某种方式对应于以下方法。
例如,
myEventHandlerDelegateRef = (EventHandler) Delegate.Combine(
myEventHandlerDelegateRef,
new EventHandler(myEventHandlerRefDefinition)
);
可以清楚地观察到,内部使用了实例化运算符
new
。