Jon*_*eet 16
就像+ =订阅事件的处理程序一样, - =取消订阅它.
当您不再希望在引发事件时调用特定处理程序时使用它.您通常只需要使用它,提升事件的组件在逻辑上比事件的处理程序更长 - 如果您不取消订阅,"事件提升者"实际上有一个对处理程序的引用,因此可以保持活动时间长于你要.
如评论中所述:
-=
只会删除一个处理程序; 如果订阅了多个处理程序(即使使用完全相同的委托),它仍然只会将处理程序计数减少1.指定处理程序的最后一个实例是删除的处理程序.(因此,如果您之前有处理程序A,B,A,C按此顺序订阅,并删除了A,则最终会得到A,B,C.)-=
如果指定的处理程序尚未订阅委托,则不会导致错误; 它只是忽略了请求.即使事件目前没有处理者订阅它也是如此.就像您可以通过添加事件处理程序一样+=
,您可以通过它们删除它们-=
.
例如:
mybutton.Click += new EventHandler(myhandler);
Run Code Online (Sandbox Code Playgroud)
您可以稍后将其删除:
mybutton.Click -= new EventHandler(myhandler);
Run Code Online (Sandbox Code Playgroud)
...因为相同方法和实例的事件处理程序是等效的(因此您不需要保留对您使用的处理程序的引用+=
并使用该处理程序-=
).