繁体   English   中英

我是否需要处理瞬时一次性物品?

[英]Do I need to dispose transient disposable objects?

我有一个创建多个IDisposable对象的类,然后所有这些对象都传递给第三方库中的另一个'manager'类。 由于我在以后的调用中需要一些对象,因此我保留了对创建对象的本地字段引用,以便我以后可以访问它们。 当我在类上运行FxCop时,它说我应该实现IDisposable,因为我保留了引用的一次性对象。 我的问题是:

  1. 我应该为我的班级实施IDisposable吗? (或者是经理的责任吗?)
  2. 如果是这样,我应该只处理我保留参考的对象吗? 或者我应该找到一种处理我创建的所有对象的方法。

我的代码:

public class MyClass  
{  
    ClassThatIsDisposable aReference;  
}

public MyClass(ManagerClass manager)  
{  
    ClassThatIsDisposable transient=new ClassThatIsDisposable();  
    manager.Add(transient);  
    aReference=new ClassThatIsDisposable();  
    manager.Add(aReference);  
}

public void LaterCall()  
{  
    areference.Method();  
}  

拥有该对象的类是应该处理它们的类......听起来你的经理是所有者,所以他应该处置该对象。

如果您试图避免FXCop警告,那么一个选项是让MyClass每次需要使用它时从管理器请求一次性对象。 这样您就不会有成员变量持有对它的引用。 您可以这样做,我使用Add()方法返回已添加对象的akey,然后在需要使用它时使用此键从管理器中检索对象。

如果您创建任何一次性物品,您应该自己处理它们或确保将它们交给另一个负责此类的课程。

在这种情况下,我会说这实际上取决于经理类将要做什么。 如果这可以保证它会处理添加到它的任何东西,那你没问题。 它确实看起来像一个有点奇怪的设计模式 - 我不能说我自己使用过类似的东西。 这并不是说它必然是错误的/坏的,但至少值得再看看是否有任何方法可以避免这种轻微的所有权混淆。

请记住,如果经理处理您持有引用的对象,则之后可能无法使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM