gpt4 book ai didi

c# - 当我们从 `using` block 中的方法返回时,内存是如何处理的?

转载 作者:太空狗 更新时间:2023-10-30 01:01:39 25 4
gpt4 key购买 nike

考虑以下代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com