考虑以下代码:
public Bar GetBar()
{
using(var foo = new Foo())
{
return foo.Bar;
}
}
这是泄漏,还是调用了 foo.Dispose()
?是否有可能由于 foo
被释放而导致返回值无效?
最佳答案
此处的答案接近但不完整且不一致。
Is this leaky, or is foo.Dispose() called?
Dispose
被调用。 using
block 被转换为 try
/finally
block ,其中 foo
在 中处理最后
部分。 finally
将在 try
完成后(无论是异常还是自然地)以及返回给调用者之前被调用。所以 Dispose
几乎在所有情况下都会被调用(除非出现非常严重的异常,例如内存不足、线程中止等)
Is it possible that the return value is invalid as a result of foo being disposed?
当然,如果 Dispose
做了一些事情使 Bar
引用的对象无效,那么是的,它肯定会返回一个“无效”引用。但这必须在 Foo
中显式。处置对象不会自动处置所有属性。
关于c# - 当我们从 `using` block 中的方法返回时,内存是如何处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37735312/