SomeIdisposableImplementation2

SomeIdisposableImplementation2

在 using 语句中声明的变量是否真的因为它们在 using 块的范围内而被一起处理?

我是否需要做:

using (SomeIdisposableImplementation foo = new SomeIdisposableImplementation())
{
    using(SomeIdisposableImplementation2 bar = new SomeIdisposableImplementation2())
    {

    }
}

或者这是否足够并且“bar”与“foo”一起处理?
using (SomeIdisposableImplementation foo = new SomeIdisposableImplementation())
{
    SomeIdisposableImplementation2 bar = new SomeIdisposableImplementation2();
}

最佳答案



不,酒吧不会被处理。
using 语句转换为 try-finally 块,因此即使发生异常,finally 块也能确保调用 Dispose 方法。

下列的

using (SomeIdisposableImplementation foo = new SomeIdisposableImplementation())
{
    SomeIdisposableImplementation2 bar = new SomeIdisposableImplementation2();
}

翻译成
{
    SomeIdisposableImplementation foo;
    try
    {
        foo = new SomeIdisposableImplementation();
        SomeIdisposableImplementation2 bar = new SomeIdisposableImplementation2();
    }
    finally
    {
        if (foo != null)
            foo.Dispose();
    }
}

保留 bar 未处理。

关于c# - 使用语句和 IDisposable 接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17928163/

10-10 16:16