我看到一些使用 - = new EventHandler(anEvent)的代码,你能告诉我与'= = new EventHandler'有什么不同?
由于
答案 0 :(得分:12)
One将一个委托添加到订阅者集合中,另一个删除它。
例如,如果您之前订阅了某个活动,但是想要在关闭表单时删除该引用,则可以使用-=
版本,并且不会再收到通知。
答案 1 :(得分:2)
-=
运算符从事件中删除事件处理程序,而+=
则为事件添加事件处理程序。
例如:
if (checkSomething())
{
//handle clicks on myControl
myControl.Click += MyEventHanderMethod;
}
else
{
//stop handling clicks on myControl
myControl.Click -= MyEventHanderMethod;
}
答案 2 :(得分:2)
我想绝不应该使用 - = new EventHandler(anEvent),因为 new 事件处理程序还不能在事件委托列表中使用。应该这样做:
EventHandler eventHandler = new EventHandler(anEvent);
anObject.Event += eventHandler;
...
anObject.Event -= eventHandler;
<强>更新强>
实际上Ed是对的,委托将检查目标和方法,而不是处理程序对象。有点迟到让我学习这一点,让我写了很多过时的帖子......
答案 3 :(得分:2)
这两个运算符都只是内部框架方法System.MultiCastDelegate.Combine()和System.MultiCastDelegate.Remove()的语法快捷方式。每个委托派生自System.MultiCastDelegate,其中包含委托的内部私有链接列表。 IL编译器(组合和删除)转换为+ =和 - =的新方法实际上只是从委托参数添加,(或分别删除)内部委托(在+ =或 - 的右侧) +)到左侧代表的内部链接列表