"使用"是否也处理在构造函数中创建的对象?

byt*_*e77 0 .net c# idisposable using-statement

当创建一个实现一个元素IDisposable,Dispose()是在结束所谓的using块还,如果抛出一个异常,如果我是正确的.

但是,在ClassB一次性元素的构造函数中创建新元素时,如果IDisposable实现了ClassB的对象,是否也会被处置?

using (ClassA a = new ClassA(new ClassB()))
{
}
Run Code Online (Sandbox Code Playgroud)

这可能适用于与之相关的类Stream.但是,这一般适用吗?

Tre*_*ley 5

ClassB将只设置如果的Dispose方法ClassA调用就可以了处理.

class ClassA : IDisposable
{
    private ClassB b;
    public ClassA (ClassB b) { this.b = b; }
    public void Dispose() { this.b.Dispose(); }
}
Run Code Online (Sandbox Code Playgroud)

如果不是,您需要单独处理它:

using (ClassB b = new ClassB())
using (ClassA a = new ClassA(b))
{
}
Run Code Online (Sandbox Code Playgroud)

  • @ bytecode77,处理注入的对象实际上不是一个好习惯.在这个答案的例子1是一个错误的决定.如果`ClassB`对象在许多`ClassA`实例之间共享怎么办? (2认同)