添加事件处理程序

时间:2011-04-22 14:09:55

标签: c# events event-handling

有人可以告诉我以下陈述的区别是:

MyObject.MyEvent += new EventHandler(MyEventHandlerMethod);
vs.
MyObject.MyEvent += MyEventHandlerMethod;

每当我按+=时,当我点击标签时弹出第一个选项,所以我总是离开它。但我想知道我是否可以写第二个。我猜他们两个都编译得一样,但我很好奇,如果那是真的。我很确定我可以只看IL,但我太懒了:)我宁愿问。

4 个答案:

答案 0 :(得分:7)

第一个变体在第一个C#编译器中是必需的。后续版本不需要它 - 第二个版本严格等同于第一个版本,编译器将提供构造函数调用。

由于第二个变体更短,删除了不必要的冗余并且没有缺点,我建议使用它,而不是显式版本。另一方面,IDE很遗憾只为第一个版本提供了智能代码完成功能,因此您可能只想使用它。

答案 1 :(得分:2)

他们是一样的。第一个声明由第二个声明推断,并在管道中为您处理。

答案 2 :(得分:1)

他们是完全相同的。没有区别。第二种形式基本上是第一种形式的简写,它们将产生相同的IL。

答案 3 :(得分:0)

因此,结论是,将SomeEvent += new EventHandler(NamedMethod)编写为与SomeEvent += NamedMethod相同的内容。但是如果您打算稍后删除该事件处理程序,那么您真的应该保存该委托。

参考:+= new EventHandler(Method) vs += Method

Difference between ‘ += new EventHandler’ and ‘ -= new EventHandler(anEvent)’