2011-12-12 61 views
6

爲什麼我必須使用以下命令來分離事件?爲什麼「新」操作符使用 - =分隔事件處理程序?

object.myEvent -= new MyEvent(EventHandler); 

我一些如何惱火的是,運營工作。

有人可以解釋一下嗎?

更新

我已經知道,我沒有使用新的運營商分離的事件,但它仍然是Visual Studio中的自動完成建議,2010年我的真正的問題是如何做 - =分離過程的新工作。一個新的對象/委託如何匹配+ =側的先前創建的對象/委託?

回答

12

您不必使用new運算符。您還沒有過,因爲C#2.0出來了:

foo.SomeEvent += EventHandler; 
foo.SomeEvent -= EventHandler; 

這將使用方法組轉換創建從方法組(該方法的名稱)的委託。這不僅僅是對於事件,或者:

Action<string> writeToConsole = Console.WriteLine; 

編輯:至於如何工作:

  • 對事件使用-=剛剛結束調用「刪除」訪問,通常在一個委託使用-= ...(至少有效)
  • 在委託使用-=Delegate.Remove
  • 語法糖使用委託平等 - 2個委託實例是相等的,如果它們具有相同的方法和相同的目標實例(例如方法)

注意,使用的方法組轉換仍然將創建每次代表的新實例你閱讀代碼。

+0

好吧,「所以現在我很惱火,我必須使用+ =,然後是 - =,是什麼給了?」 ;-) – 2011-12-12 07:43:12

+0

謝謝你的回答,但你能給我更多的細節嗎?我知道我不必使用新的。但它仍然是在Visual Studio 2010中自動完成的。(如果您鍵入foo.SomeEvent + = Visual Studio建議執行+ = new ...我想知道.net如何在內部處理分離操作。一個事先創建的對象/代理? – Grrbrr404

+0

@ Grrbrr404:編輯得當你可能想考慮重新編寫你的問題 - 如果你知道你不需要使用新的操作符來分離一個事件,那麼「爲什麼我有使用「新」來分離事件處理程序使用 - =?「似乎很奇怪 –

相關問題