如果对象在using语句中创建并且未明确绑定到引用,那么该对象是否有资格进行垃圾回收?

sha*_*oth 4 .net c# using-statement

我有这个(仅限插图)C#代码:

using( new System.IO.MemoryStream() ) {
    System.Threading.Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

请注意,此处MemoryStream创建a 并未明确绑定到引用.因此,除非由于using语句而有一些特殊处理,否则对象没有引用它,并且可以在控制离开using语句之前收集,甚至可能在Sleep()完成之前收集.

MemoryStream在控制权离开using声明之前是否有资格收集?

SLa*_*aks 8

没有.

using语句将编译为finally处理该对象的块.

因此,它仍然在范围内,直到块结束.