c#中Using块的目的是什么?它和局部变量有什么不同?


当前回答

using (B a = new B())
{
   DoSomethingWith(a);
}

等于

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}

其他回答

在Using块离开后使用Dispose(),即使代码抛出异常。

因此,您通常将using用于需要在它们之后清理的类,例如IO。

所以,这个使用block:

using (MyClass mine = new MyClass())
{
  mine.Action();
}

会做同样的事情:

MyClass mine = new MyClass();
try
{
  mine.Action();
}
finally
{
  if (mine != null)
    mine.Dispose();
}

使用“使用”更简短,更容易阅读。

还要注意,通过using实例化的对象在using块中是只读的。请参考这里的官方c#参考。

using (B a = new B())
{
   DoSomethingWith(a);
}

等于

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}

它实际上只是一些语法糖,不需要对实现IDisposable的成员显式调用Dispose。

using语句获取一个或多个资源,执行一条语句,然后处置资源。