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

时间:2008-10-08 15:50:06

标签: c# .net

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

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

    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();  
    }  
    

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果你创造了任何一次性物品,你应该自己处理它们,或者确保你把它们交给另一个对此负责的班级。

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

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