在 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/