我们什么时候必须按事件使用此运算符?它的用途是什么?
答案 0 :(得分:15)
就像+ =订阅事件的处理程序一样, - =取消订阅它。
当您不再希望在引发事件时调用特定处理程序时使用它。您通常只需要使用它,提升事件的组件在逻辑上比事件的处理程序更长 - 如果您不取消订阅,“事件提升者”实际上有一个对处理程序的引用,因此可以保持活动时间长于你想要的。
如评论中所述:
-=
只会移除一个处理程序;如果订阅了多个处理程序(即使使用完全相同的委托),它仍然只会将处理程序计数减少1.指定处理程序的最后一个实例是删除的处理程序。 (因此,如果您之前有处理程序A,B,A,C按此顺序订阅,并删除了A,则最终会得到A,B,C。)-=
不会导致错误;它只是忽略了请求。即使事件目前没有处理者订阅它也是如此。答案 1 :(得分:7)
正如您可以通过+=
添加事件处理程序一样,您可以通过-=
删除它们。
例如:
mybutton.Click += new EventHandler(myhandler);
您可以稍后将其删除:
mybutton.Click -= new EventHandler(myhandler);
...因为相同方法和实例的事件处理程序是等效的(因此您不需要保留对+=
使用的处理程序的引用,并将其与-=
一起使用)
答案 2 :(得分: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
被调用。
答案 3 :(得分:1)
删除事件处理程序功能。 {{3P>
答案 4 :(得分:1)
我怀疑+ =的后台逻辑是将处理程序添加到给定事件的事件处理程序的列表/数组中。当使用 - =时,它会将您的右手参数与它为此事件保存的事件处理程序列表进行比较,并将其从列表中删除。如果对给定事件执行多个+ =,则会调用每个处理程序。
另有说明: + =表示将方法添加到事件发生时要调用的方法列表中。 - =表示从要调用的方法列表中删除指定的方法。
如果删除了所有内容,则该事件将没有处理程序,并且该事件将被忽略。