我在构造函数中附加了类似的动作:
model.DataArrived += new Action<List<ConsoleData>>(model_DataArrived);
我应该在OnDispose
分开吗?可以创建这样的新实例吗?
protected override void OnDispose()
{
model.DataArrived -= new Action<List<ConsoleData>>(model_DataArrived);
或者我应该分离我在构造函数中创建的完全相同的实例?我是否应该将此实例保留在私有字段中仅用于分离目的?
答案 0 :(得分:3)
没关系 代表按价值进行比较,而不是参考。
Delegate.Remove
方法和相应的-
运算符,从第一个操作数中删除最后一个匹配的委托。
如果model
比你的对象活得更久,你只需要删除处理程序。如果是这样,model
中的事件将保留对您的对象的引用,使您的对象保持活动太长时间。
答案 1 :(得分:1)
我应该在OnDispose中分离吗?
是。否则,模型实例将阻止收集此实例。
正如Slaks回答的那样,-=
符号很好。