簡體   English   中英

'+ = new EventHandler'和' - = new EventHandler(anEvent)'之間的區別

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

我看到一些代碼使用- = new EventHandler(anEvent) ,你能告訴我'+ = new EventHandler'有什么不同嗎?

謝謝

一個將一個委托添加到訂閱者集合中,另一個刪除它。

例如,如果您之前訂閱了某個事件,但是您希望在關閉表單時刪除該引用,則可以使用-=版本,您將不再收到通知。

-=運算符從事件中刪除偶數處理程序,而+=將事件處理程序添加到事件。

例如:

if (checkSomething())
{
//handle clicks on myControl
myControl.Click += MyEventHanderMethod;
}
else
{
//stop handling clicks on myControl
myControl.Click -= MyEventHanderMethod;
}

我想一個人永遠不應該使用 - = new EventHandler(anEvent),因為新的事件處理程序還不能在事件委托列表中。 應該做的事情:

EventHandler eventHandler = new EventHandler(anEvent);
anObject.Event += eventHandler;
...
anObject.Event -= eventHandler;

更新

實際上Ed是對的,委托將檢查目標和方法,而不是處理程序對象。 有點遲到讓我學習這個,讓我寫了很多過時的帖子......

這兩個運算符都是內部框架方法System.MultiCastDelegate.Combine()和System.MultiCastDelegate.Remove()的語法快捷方式。 每個委托派生自System.MultiCastDelegate,其中包含委托的內部私有鏈接列表。 IL編譯器(組合和刪除)轉換為+ =和 - =的新方法實際上只是從委托參數添加,(或分別刪除)內部委托(在+ =或 - 的右側) +)到左側代表的內部鏈接列表,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM