使用块是否为GC创建和维护引用?

Tan*_*lax 2 c# garbage-collection using using-statement

这主要是为了好奇,因为有我能想到的实现几乎所有用例的更好的方式为这个结构(在C#和其他语言我经常使用,至少),但我最近看到在这里一个范围的互斥这是一个很酷的概念.

我的问题是,using语句是否维护一个引用(即:阻止GC运行)到它所作用的对象?

例如,如果我这样做:

using (new ScopedMutex())
{
// ...
}
Run Code Online (Sandbox Code Playgroud)

ScopedMutex对象是否会在使用块结束时保持其存在,或者GC可以在块中运行并处理它吗?

Meh*_*ari 6

不,GC不会处理它.对该对象的引用存储在局部变量中(有关详细信息,请参阅此答案).局部变量被视为GC根,并且可以从该对象访问该对象(需要可以访问该using块以便能够对其进行调用Dispose).