using (Stuff1 stf1 = new Stuff1(...)) // Allocation of stf1
using (Stuff2 stf2 = new Stuff2(...)) // Allocation of stf2
{
try
{
// ... do stuff with stf1 and stf2 here ...
}
catch (Stuff1Exception ex1)
{
// ...
}
catch (Stuff2Exception ex2)
{
// ...
}
} // Automatic deterministic destruction through Dispose() for stf1/stf2 - but in which order?
换句话说,stf2的Dispose()方法是否保证先被调用,stf1的Dispose()方法保证后被调用? (基本上:Dispose() 方法的调用顺序与其所属对象的分配顺序相反?)
最佳答案
using 语句与其他 block 级语句没有什么不同。如果你写了这样的代码:
if (...)
if (...)
{
}
你会很清楚事情发生的顺序(不是我会推荐那个特定的结构),因为它和这个完全一样:
if (...)
{
if(...)
{
}
}
using
也是如此。您的代码与以下代码没有什么不同:
using (...)
{
using(...)
{
}
}
这里,很明显,内部 using block 首先终止,因此它的资源应该首先被释放。
关于c# - 在 C# 中对同一作用域使用多个 using 语句时,Dispose() 方法的调用顺序是否有保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924761/