在"使用"块内重新初始化是一个坏主意,在任何时候都要避免.我还是会问这个:
为什么"使用"调用处理原始值而不是最后一个引用或重新初始化(如果使用try finally block则会发生这种情况)
MyClass b = new MyClass();// implements Idisposable
MyClass c = new MyClass();
MyClass a ;
using (a = new MyClass())
{
a = b;
a = c;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,dispose将在原始引用上调用,而不是在引用时更新.这可以通过在dispose方法中在控制台上打印一些内容来轻松验证.
然而,使用try {} finally代码调用最后一个引用dispose方法.
try
{
a = new MyClass();
a = b;
a = c;
}
finally
{
a.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
MSDN:using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
Run Code Online (Sandbox Code Playgroud)
基本上"使用"转换为:
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset …Run Code Online (Sandbox Code Playgroud)