什麼時候我們必須按事件使用這個操作符?它的用法是什麼?這是什麼意思在C#中:使用 - =運算符的事件?
6
A
回答
12
就像+ =訂閱你的事件處理程序一樣, - =取消訂閱它。
使用它時,你不再需要時,引發該事件被稱爲一個特定的處理程序。你經常只需要使用它引發事件的組件在邏輯上要長於事件的處理程序 - 如果不取消,將「事件專業戶」,有效地具有對處理程序的引用,因此可以把它比活得更長你要。
正如評論指出:
-=
只會刪除單個處理器;如果有多個處理程序訂閱(即使使用完全相同的委託),它仍然只會將處理程序計數減1。指定處理程序的最後一個實例是已刪除的處理程序。 (所以,如果你以前有處理程序A,B,A,C認購的順序,並刪除A,你最終與A,B,C)-=
不會導致錯誤,如果指定的處理尚未訂閱該代表;它只是忽略了這個請求。即使事件目前沒有處理程序訂閱,情況也是如此。
1
您刪除了事件處理函數。 C# Tutorial, Events and Delegates
6
就像您可以通過+=
添加事件處理程序一樣,您可以通過-=
刪除它們。
例如:
mybutton.Click += new EventHandler(myhandler);
以後,您可以刪除它是這樣的:
mybutton.Click -= new EventHandler(myhandler);
......因爲同樣的方法和實例事件處理程序是等價的(所以你不需要保留給您+=
使用的處理程序的引用,並使用與-=
那一個)。
3
的+=
和-=
運營商可以在C#被用於從一個對象的事件中的一個添加/移除事件處理程序/:
// adds myMethod as an event handler to the myButton.Click event
myButton.Click += myMethod;
上面的代碼運行後,myMethod
方法將被調用每次點擊了myButton
。
// removes the handler
myButton.Click -= myMethod;
上面的代碼運行後,點擊myButton
將不再導致myMethod
被調用。
1
我懷疑的+ =背景邏輯用於將所述處理程序添加到事件處理程序的列表/陣列,用於給定的事件。當使用 - =時,它會將右手參數與它爲此事件保存的事件處理程序列表進行比較,並將其從列表中刪除。如果你爲給定的事件做了多個+ =,每個處理程序都會被調用。
換句話說: + =表示添加一個方法來的方法的列表在事件發生時調用。 - =表示從要調用的方法列表中刪除指定的方法。
如果全部刪除,事件將沒有處理程序,並且該事件將被忽略。
相關問題
- 1. 這是什麼「>> =」運算符在C中的意思?
- 2. 這是什麼意思[:-ge:意外的運算符,在bash中?
- 3. 這是什麼意思?=在VB中的運算符意味着什麼?
- 4. 這個運算符〜是什麼意思在jQuery中?
- 5. 這個運算符在PHP中是什麼意思?
- 6. 這是什麼?運算符在C#中的意思是類型聲明之後?
- 7. 這是什麼意思 - C#
- 8. >?=運算符是什麼意思?
- 9. <>運算符是什麼意思
- 10. | =運算符是什麼意思?
- 11. ,運算符是什麼意思?
- 12. &運算符是什麼意思?
- 13. 逗號運算符是什麼意思?
- 14. 「<>」運算符是什麼意思?
- 15. python < - 運算符:是什麼意思?
- 16. 〜>運算符是什麼意思?
- 17. 運算符「:」在C中是什麼意思?
- 18. 什麼是C#中的問號運算符的意思?
- 19. 這是什麼意思? [c#]
- 20. 這是什麼意思-c
- 21. 這是什麼意思在C++
- 22. C中的shellcode - 這是什麼意思?
- 23. 這些運算符是什麼意思(**,^,%,//)? - Python?
- 24. 語法/運算符Java - 這行是什麼意思?
- 25. 這兩個運算符是什麼意思「| =」和「|」
- 26. 這個紅寶石運算符是什麼意思$?
- 27. 這個JavaScript運算符是什麼意思? >>>
- 28. 轉到「&^」運算符,這是什麼意思?
- 29. 方括號內的C++運算符是什麼意思?
- 30. 這是什麼意思在Objective-C
+1。另外值得一提的是,如果未能退訂某個事件,往往是程序內存不足的原因,因爲它會阻止對象變爲符合GC的條件。 – RichardOD
喬恩,我有點害怕的事實,我們都開始我們的答案與「就像...」;-) –
什麼是VB.NET版本的' - ='..我的意思是如何取消訂閱事件..? – dotNETbeginner