'+ = new EventHandler'和' - = new EventHandler(anEvent)'之间的区别

时间:2009-07-06 23:39:41

标签: c#

我看到一些使用 - = new EventHandler(anEvent)的代码,你能告诉我与'= = new EventHandler'有什么不同?

由于

4 个答案:

答案 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编译器(组合和删除)转换为+ =和 - =的新方法实际上只是从委托参数添加,(或分别删除)内部委托(在+ =或 - 的右侧) +)到左侧代表的内部链接列表