[英]Do I need to dispose transient disposable objects?
我有一个创建多个IDisposable对象的类,然后所有这些对象都传递给第三方库中的另一个'manager'类。 由于我在以后的调用中需要一些对象,因此我保留了对创建对象的本地字段引用,以便我以后可以访问它们。 当我在类上运行FxCop时,它说我应该实现IDisposable,因为我保留了引用的一次性对象。 我的问题是:
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.