您是否需要在使用块中设置对新对象的显式引用?

Jan*_*ich 5 c#

"using"块通常是这样编写的:

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

而不是像这样:

using (var f = new Foo()) { ... }
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,如果没有设置对新Foo对象的显式引用,是否存在在块结束之前可以处置对象的危险?如果没有,为什么不呢?

Jus*_*ner 14

没有危险它会被提前处理.

第一个示例仍然创建对创建的对象的显式引用.该引用只是未命名,不能在您的代码中使用.

using块将保留引用(尽管未命名),直到块结束.


Bla*_*ICE 3

不,您不需要设置显式引用,除非您需要使用范围块访问对象。未引用的变量不存在被提前处置的危险,因为它仅在超出范围时才被处置。