2011-03-28 54 views
3

在下面的代码中,底层代码是否包含对Foo类型的未命名变量实例的硬引用,或者是易受垃圾回收影响的项目?使用子句中的隐式变量是否会被垃圾收集?

using(new Foo()) 
{ 
    // Something done here. 
} 

将收集的项目仅仅是如此它不被在代码块中引用,其对资源一些参考计数信号量类型的对象。

+0

'使用'块将块放置在块的末尾。艾尔戈,必须有一个参考它来处置。 – SLaks 2011-03-28 18:23:52

回答

10

using子句创建一个隐藏的本地作用域变量来保存该对象(该变量由生成的finally子句使用)。

该变量可以防止对象被GC'd。

您可以see this variable in the spec

3
using(new Foo()) 

Foo这个匿名实例将走出去的范围后用块可收集垃圾,然后。