2

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

然后我可以这样使用它:

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

如果我这样做了,CultureChanger 是否有可能在 using 块完成之前被清理掉?

4

3 回答 3

6

CultureChangerusing在块“完成”之前不会被清理。

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

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

于 2012-11-19T12:38:10.887 回答
1

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

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

using 语句可确保调用 Dispose,即使在调用对象上的方法时发生异常也是如此。

于 2012-11-19T12:41:52.323 回答
1

CultureChanger 实例将在整个 using 块中保持“活动”状态,并且其 Dispose 方法将在 using statemnet 的右花括号 '}' 上调用。因此,您的问题的答案是:CultureChanger 没有被清理的风险。

于 2012-11-19T12:44:39.633 回答