using子句中的隐式变量是否会被垃圾收集?

时间:2011-03-28 18:21:05

标签: c# garbage-collection

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

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

收集的项目只是一个信号量类型对象,它对资源执行一些引用计数,因此它不会在代码块中被引用。

2 个答案:

答案 0 :(得分:10)

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

此变量可防止对象进行GC。

你可以see this variable in the spec

答案 1 :(得分:3)

using(new Foo())

这个Foo的匿名实例将在>使用块之后超出范围,然后可能会被垃圾收集。