在类中多次使用IDisposable对象的更好方法

时间:2013-12-11 09:37:29

标签: c# idisposable

假设我们有一个名为A的类,它实现了IDisposable接口。所以,当我们 使用它,我们写道:

using(classA cA = new classA())
{

}

让我们想要在另一个类的许多方法中使用classA,实际上在我的例子中是一个包含业务逻辑的模块中的类。有没有办法避免在所有这些中使用上述编码?

换句话说,有没有比使用以下更好的方法来使用classA?

class B
{

    // properties

    // constructors

    // methods

    public void methodA()
    {
        using(classA cA = new classA())
        {
            // code goes here
        }
    }

    public void methodB()
    {
        using(classA cA = new classA())
        {
            // code goes here
        }
    }

    public void methodC()
    {
        using(classA cA = new classA())
        {
            // code goes here
        }
    }
}

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

让课程B实施IDisposable

A的构造函数中创建B的实例(或在首次使用时懒洋洋地创建它),将其存储在一个字段中并将其置于类B的{​​{{ 1}}方法。

答案 1 :(得分:2)

这确实取决于你需要ClassA的短暂存在。

另一种方法是使ClassB实现IDisposable

class B : IDisposable {

    private classA cA;

    public B() {
      cA = new classA();
    }

    public void Dispose() {
        if (cA != null) {
           cA.Dispose();
           cA = null;
        }
    }
}

但是你需要用一个使用来包装对classB的所有调用,所以我不确定你会得到什么。