C# 连接后是否应分离操作?

C# 连接后是否应分离操作?,c#,C#,我在构造函数中附加了这样的动作: model.DataArrived += new Action<List<ConsoleData>>(model_DataArrived); 或者我应该分离与我在构造函数中创建的实例完全相同的实例?我是否应该将此实例保留在私有字段中,仅用于分离目的?这很好。 代理按值进行比较,而不是按引用进行比较 Delegate.Remove方法和相应的-运算符从第一个操作数中删除最后一个匹配的委托 如果model的寿命比对象长,则只需删除处理程序。

我在构造函数中附加了这样的动作:

model.DataArrived += new Action<List<ConsoleData>>(model_DataArrived);
或者我应该分离与我在构造函数中创建的实例完全相同的实例?我是否应该将此实例保留在私有字段中,仅用于分离目的?

这很好。
代理按值进行比较,而不是按引用进行比较

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

如果
model
的寿命比对象长,则只需删除处理程序。如果是这样,模型中的事件将保留对对象的引用,使对象保持太长时间的活动状态

我应该在OnDispose中分离它吗

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


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

您可能想阅读我的。什么是
OnDispose()
?你是说
Dispose(bool)
?如果是这样,您需要在
If(disposing)
检查中执行此操作。您可以将其写得更短“model.dataarrized+=model\u dataarrized;”,类似于-=。不是对问题的回答,而是对答案的改进…@SLaks我的意思是
System.IDisposable.Dispose()
@erikH谢谢,有了这样的改进,问题会自动得到回答。注意,这只是对你已经在做的事情的简写;没有什么不同。(这是C#2的新功能)
protected override void OnDispose()
    {
        model.DataArrived -= new Action<List<ConsoleData>>(model_DataArrived);