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