它在C#中意味着什么:使用 - =运算符?

mas*_*ani 7 c# events operators

我们何时必须通过事件使用此运算符?它的用途是什么?

Jon*_*eet 16

就像+ =订阅事件的处理程序一样, - =取消订阅它.

当您不再希望在引发事件时调用特定处理程序时使用它.您通常只需要使用它,提升事件的组件在逻辑上比事件的处理程序更长 - 如果您不取消订阅,"事件提升者"实际上有一个对处理程序的引用,因此可以保持活动时间长于你要.

如评论中所述:

  • -=只会删除一个处理程序; 如果订阅了多个处理程序(即使使用完全相同的委托),它仍然只会将处理程序计数减少1.指定处理程序的最后一个实例是删除的处理程序.(因此,如果您之前有处理程序A,B,A,C按此顺序订阅,并删除了A,则最终会得到A,B,C.)
  • -=如果指定的处理程序尚未订阅委托,则不会导致错误; 它只是忽略了请求.即使事件目前没有处理者订阅它也是如此.

  • +1.还值得一提的是,未能取消订阅事件通常是程序内存不足的原因,因为它会阻止对象符合GC的条件. (6认同)

T.J*_*der 8

就像您可以通过添加事件处理程序一样+=,您可以通过它们删除它们-=.

例如:

mybutton.Click += new EventHandler(myhandler);
Run Code Online (Sandbox Code Playgroud)

您可以稍后将其删除:

mybutton.Click -= new EventHandler(myhandler);
Run Code Online (Sandbox Code Playgroud)

...因为相同方法和实例的事件处理程序是等效的(因此您不需要保留对您使用的处理程序的引用+=并使用该处理程序-=).