4

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

using( new System.IO.MemoryStream() ) {
    System.Threading.Thread.Sleep(1000);
}

请注意,这里 aMemoryStream是创建的,并且没有显式绑定到引用。因此,除非由于using语句而有一些特殊处理,否则对象没有对它的引用,并且可以在控制离开using语句之前甚至在Sleep()完成之前收集。

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

4

2 回答 2

8

不。

using语句编译为finally处理对象的块。

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

于 2013-04-25T14:00:16.517 回答
3

不它不是。

在幕后,MemoryStream已创建了对 的隐藏引用,因此它仍然存在。

于 2013-04-25T14:00:27.023 回答