添加事件处理程序

7
有人能告诉我以下语句的区别吗或者它们是否不同?
MyObject.MyEvent += new EventHandler(MyEventHandlerMethod);
vs.
MyObject.MyEvent += MyEventHandlerMethod;

每当我按+=,第一个选项会在我点击tab键时首先弹出来,所以我总是留下它。但我想知道是否可以直接写第二个选项。我猜两者都会被编译成相同的代码,但我很好奇这是否正确。我相信我可以查看IL代码,但我有点懒 :),所以我宁愿问一下。

可能是C#事件处理程序的重复问题。 - nawfal
4个回答

7

第一种方式在最初的C#编译器中是必需的。后续版本不需要它 - 第二种方式严格等同于第一种方式,并且编译器将提供构造函数调用。

由于第二种方式更短,去除了不必要的冗余并且没有缺点,我建议使用它,而不是显式版本。另一方面,IDE不幸地只为第一种版本提供智能代码完成,因此您可能希望选择它。


1
不完全相同。请看我的回答。两者编译成的结果与仅使用 SomeEvent += NamedMethod 相同。但是,如果您计划稍后删除该事件处理程序,则确实应该保存委托。 - Priyank
@Priyank 不需要这样做。-= 也可以与任何形式一起使用。 - Konrad Rudolph

2

它们是相同的。第一个语句是从第二个语句推导出来的,并在管道中为您处理。


1

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


0

我理解你的观点,但我同意第一篇帖子中其他答案的看法,即保存委托是一种微观优化,在大多数情况下是不必要的。 - Jose
我没有给你点踩,也看不出有什么理由要点踩。 - Jose
“但是,如果你计划稍后删除该事件处理程序,那么你确实应该保存委托。” - 不,为什么? - Konrad Rudolph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接