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

问题描述 投票:0回答:4

采取以下代码:

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

以下有什么区别?

[object].[event] += anEvent;

//and

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

[更新]

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

c# delegates event-handling
4个回答
83
投票

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

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


18
投票
[object].[event] += anEvent;

只是 -

的语法糖
[object].[event] += new EventHandler(anEvent);

11
投票

我不认为有什么不同。编译器将第一个转换为第二个。


0
投票

对于新手,我试图简单地解释一下这两种用法是一回事。当我们查看它的声明时,我们通过将鼠标指针悬停在

+
=+
EventHandler
的运算符上得到以下内容。

EventHandler EventHandler.operator +(EventHandler left, EventHandler right)

从现在开始我们很确定这是一种operator overloading,也就是

+
,同时不知道它的实现细节。此时,我们可以利用ILSpy显示重载运算符以某种方式对应于以下方法。

(EventHandler)Delegate.Combine(< The EventHandler reference >, < The signature matched method implementation of the reference in question >);

例如,

myEventHandlerDelegateRef = (EventHandler) Delegate.Combine(
                    myEventHandlerDelegateRef,
                    new EventHandler(myEventHandlerRefDefinition)
                    );

可以清楚地观察到,内部使用了实例化运算符

new

© www.soinside.com 2019 - 2024. All rights reserved.