C# 我是否需要处置一次性物品?

C# 我是否需要处置一次性物品?,c#,.net,C#,.net,我有一个类,它创建了几个IDisposable对象,所有这些对象都被传递给第三方库中的另一个“manager”类。由于我在以后的调用中需要一些对象,所以我保留了对所创建对象的本地字段引用,以便以后可以访问它们。当我在类上运行FxCop时,它说我应该实现IDisposable,因为我保留了一个引用的一次性对象。我的问题是: 我应该为我的类实现IDisposable吗?(或者这是经理的责任?) 如果是这样,我应该只处理我保留引用的对象吗?或者我应该找到一种方法来处理我创建的所有对象 我的代码: 如果

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

  • 我应该为我的类实现IDisposable吗?(或者这是经理的责任?)
  • 如果是这样,我应该只处理我保留引用的对象吗?或者我应该找到一种方法来处理我创建的所有对象
  • 我的代码:
    如果您创建了任何一次性对象,您应该自己处理它们,或者确保将它们交给另一个类,该类将对此负责

    在这种情况下,我认为这实际上取决于manager类将要做什么。如果这保证了它会处理添加到它中的任何东西,那么你就没事了。不过,它看起来确实有点奇怪——我不能说我自己也使用过类似的设计模式。这并不是说它一定是错的/不好的,但至少值得再看一眼,看看是否有任何方法可以避免这种所有权上的轻微混淆


    请记住,如果管理者处置了您持有引用的对象,那么之后该对象可能无法使用。

    拥有该对象的类就是应该处置它们的类。。。听起来你的经理是物品的主人,所以他应该处理掉物品


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

    Man,我写了一整篇文章和一个演示项目来问同样的问题。谢天谢地,这已经有了。我只是有类似的问题。
    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();  
    }