2011-04-22 120 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

它們是相同的。第一條語句由第二條語句推斷,並在管道中爲您處理。不正確。