我应该在附加后分离行动吗?

时间:2011-11-27 21:21:54

标签: c#

我在构造函数中附加了类似的动作:

model.DataArrived += new Action<List<ConsoleData>>(model_DataArrived);

我应该在OnDispose分开吗?可以创建这样的新实例吗?

protected override void OnDispose()
    {
        model.DataArrived -= new Action<List<ConsoleData>>(model_DataArrived);

或者我应该分离我在构造函数中创建的完全相同的实例?我是否应该将此实例保留在私有字段中仅用于分离目的?

2 个答案:

答案 0 :(得分:3)

没关系 代表按价值进行比较,而不是参考。

Delegate.Remove方法和相应的-运算符,从第一个操作数中删除最后一个匹配的委托。

如果model比你的对象活得更久,你只需要删除处理程序。如果是这样,model中的事件将保留对您的对象的引用,使您的对象保持活动太长时间。

答案 1 :(得分:1)

  

我应该在OnDispose中分离吗?

是。否则,模型实例将阻止收集此实例。

正如Slaks回答的那样,-=符号很好。