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

C# 使用块是否使对象保持活动状态?,c#,using,object-lifetime,C#,Using,Object Lifetime,对于某些单元测试,我希望将CurrentCulture设置为特定的区域性(然后在稍后反转这些更改)。由于我需要在多个地方执行此操作,我正在考虑编写一个CultureChanger类,该类保存旧文化并在其构造函数中设置新文化,然后在处理旧文化时重置旧文化 然后我可以这样使用它: using(new CultureChanger(culture)){ //some code and assertions with no references to the CultureChanger

对于某些单元测试,我希望将CurrentCulture设置为特定的区域性(然后在稍后反转这些更改)。由于我需要在多个地方执行此操作,我正在考虑编写一个CultureChanger类,该类保存旧文化并在其构造函数中设置新文化,然后在处理旧文化时重置旧文化

然后我可以这样使用它:

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

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

CultureChanger
直到使用块“完成”之后才会清理

using
块定义对象的作用域的方式与方法非常相似

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

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

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

using语句确保调用Dispose,即使 调用对象上的方法时发生异常


CultureChange实例将在整个using块中保持“活动”,其Dispose方法将在using statemnet的右大括号“}”上调用。因此,对您的问题的答案是:没有任何风险,CultureChanger可以得到清理。

即使进行了一些非常棒的优化,还是没有?或者更确切地说,
using
语句是否保证在使用完成之前不处理对象?如果您希望在块结束时特别执行某些操作,让类实现
IDisposable
@Default-即使进行了非常棒的优化。@Rene Wolferink您不能在未实现
IDisposable
的类上使用
using
,对吗?只是一个问题,但您写了“与方法相同的方式”,但方法通常将值存储在变量中,在这种情况下是一个参数,但这里没有。所以我们似乎没有根对象,哪个对象持有对CultureChanger的引用?