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

Does "using" also dispose objects created in the constructor?

创建实现 IDisposable 的元素时,如果抛出异常,也会在 using 块的末尾调用 Dispose(),如果我是正确的话。

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

using (ClassA a = new ClassA(new ClassB()))
{
}

这可能适用于与 Stream 相关的 类。 但是,这是否普遍适用?

简答,没有。如果 ClassB 实现了 IDisposable,你也应该将它包装在一个 using 块中:

using (var b = new ClassB())
using (var a = new ClassA(b))
{
    // do stuff
}

请记住,传递给构造函数或任何其他接受参数的方法的所有内容都会在调用构造函数或方法之前进行评估。

有些 类,例如 StreamWriterStream 所做的,将处理通过构造函数传递的任何内容,但通常将处理留给实际实例化该对象的人。

ClassB 只会被处置 如果 ClassA 的处置方法调用处置它。

class ClassA : IDisposable
{
    private ClassB b;
    public ClassA (ClassB b) { this.b = b; }
    public void Dispose() { this.b.Dispose(); }
}

如果没有,您需要单独处理它:

using (ClassB b = new ClassB())
using (ClassA a = new ClassA(b))
{
}