使用块是否使对象保持活动状态?

时间:2012-11-19 12:35:06

标签: c# using object-lifetime

对于某些单元测试,我想将CurrentCulture设置为特定的文化(然后在以后反转这些更改)。因为我需要在几个地方这样做,所以我正在考虑编写一个CultureChanger类来保存旧文化并在其构造函数中设置新文化,然后在处置过程中重置旧文化。

然后我可以像这样使用它:

using(new CultureChanger(culture)){  
    //some code and assertions with no references to the CultureChanger 
}

如果我这样做,是否有可能在使用区块完成之前的某个时间清理CultureChanger?

3 个答案:

答案 0 :(得分:6)

CultureChanger阻止“完成”之后,

using才会得到清理。

using块以与方法相同的方式定义对象的范围。

时,无法保证在块执行后对象将被垃圾收集,但之前不会发生。

答案 1 :(得分:1)

using statement提供了一种方便的语法,可确保正确使用IDisposable对象。

using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。在using块中,该对象是只读的,不能修改或重新分配。

  

using语句确保即使调用Dispose也会调用   在对象上调用方法时发生异常。

答案 2 :(得分:1)

CultureChanger实例将在整个using块中保持“活动”状态,并且它的Dispose方法将在使用statemnet的结束大括号'}'上调用。所以你回答的问题是:没有风险可以让CultureChanger得到清理。