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


当前回答

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

其他回答

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

等于

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

在using块中放置代码可以确保一旦控件离开块,对象就会被处理(尽管不一定会被收集)。

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

从MSDN:

C#, through the .NET Framework common language runtime (CLR), automatically releases the memory used to store objects that are no longer required. The release of memory is non-deterministic; memory is released whenever the CLR decides to perform garbage collection. However, it is usually best to release limited resources such as file handles and network connections as quickly as possible. The using statement allows the programmer to specify when objects that use resources should release them. The object provided to the using statement must implement the IDisposable interface. This interface provides the Dispose method, which should release the object's resources.

换句话说,using语句告诉. net一旦不再需要using块中指定的对象,就释放它。

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