2011-04-22 119 views
7

谁能告诉我,如果还是什么下面的语句的区别是:添加事件处理程序

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

当我点击选项卡,所以我一直都离开它时,我按+=的第一选择弹出。但我想知道如果我能写第二个。我猜他们都编译了一样,但我很好奇,如果这是真的。我很确定我只能看IL,但我太懒了:),我宁愿问一下。

+0

可能重复的[C#事件处理程序](http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal 2014-07-06 20:24:49

回答

7

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

由于第二变短,消除不必要的冗余,没有缺点,我建议使用,而不是明确的版本它。另一方面,不幸的是,IDE仅为第一个版本提供了智能代码完成功能,因此您可能只需要完成它。

+1

不正确。看到我的答案。两者都编译为SomeEvent + = NamedMethod相同的东西。但是,如果您打算稍后移除该事件处理程序,则确实应该保存该委托。 – Priyank 2011-04-22 14:22:48

+0

@Priyank不,不需要那个。 ' - ='也适用于任何一种形式。 – 2011-04-23 13:22:36

1

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

0

因此,这个结论是,写作SomeEvent += new EventHandler(NamedMethod)编译为只是SomeEvent += NamedMethod相同的东西。但是,如果您打算稍后移除该事件处理程序,则确实应该保存该委托。

编号:+= new EventHandler(Method) vs += Method

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

+0

你的观点就是这样,但我同意第一篇文章中的其他答案,即保存委托是一种微观优化,在**大多数**情况下是不必要的 – Jose 2011-04-22 14:32:04

+0

任何投票的理由? – Priyank 2011-04-22 14:51:25

+0

我没有投票给你,也没有看到投票的理由 – Jose 2011-04-22 18:15:39

2

它们是相同的。第一条语句由第二条语句推断,并在管道中为您处理。不正确。