使用(.....){...}是什么意思

Jam*_*ery 7 c# idisposable using using-statement

可能的重复:
在c#中使用using语句
什么是C#Using block,为什么要使用它?

只是想知道这意味着什么?我在网上看过很多具有以下语法的教程:

using (SqlCeCommand cmd2 = new SqlCeCommand("SELECT city FROM cities JOIN states ON states.id=cities.state WHERE states.state='" + read.GetString(0) + "'", con))
{
  SqlCeDataReader readCities = cmd2.ExecuteReader();
  while (readCities.Read())
  {
    parent.Nodes.Add(readCities.GetString(0));
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么用它?我尝试搜索Google,但它提供了'using'关键字,用于包含dll和其他文件.

Dav*_*fer 33

using声明

using(var disposableObject = new object_that_implements_IDisposable()) { ... }
Run Code Online (Sandbox Code Playgroud)

是类似于以下代码的语法糖:

var disposableObject = new object_that_implements_IDisposable()
try
{
    ...
}
finally
{
    if(disposableObject != null)
    {
        ((IDisposable)your_object).Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

适用于实现IDisposable的类.它有助于清理代码,其中包含对象,例如,系统资源(文件句柄,数据库连接,套接字等)需要在完成后为了剩余的资源而释放资源.系统.

理论上,您可以省略.Dispose()调用,但是您必须等待垃圾收集器释放保留的资源.GC知道何时释放对象以回收其内存使用情况非常棒,但它不知道它需要释放对象以让它们放弃其他系统资源.因此,在GC决定需要所有者使用的内存之后,才可能放弃这些关键资源.因此,当你完成它们(如果它们是一次性的)时,你肯定想要处理它们!

至于为什么你会使用usingtry/ finally,这是一个纯粹的编码器的偏好.我更喜欢,using因为你可以级联它们:

using(var a = new class())
using(var b = new class())
using(var c = new class())
using(var d = new class())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

你需要的代码非常几行这样做与try/ finally.

using还有其他优点.例如,虽然x.Dispose直接调用可能会抛出一个NullReferenceExceptionif x为null,但using(x)不会.

也可以看看:

  • 当使用**块离开**时,将调用IDisposable.Dispose.如果您还明确定义了IDisposable.Dispose,则可能与对象定义的Dispose方法不同. (2认同)