c# - Using(.....){...} 是什么意思

标签 c# idisposable using using-statement

<分区>

Possible Duplicates:
Using the using statment in c#
What is the C# Using block and why should I use it?

只是想知道这是什么意思?我在网上看到很多教程都有以下语法:

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));
  }
}

为什么使用它?我尝试在 Google 上搜索,但它出现了用于包含 dll 和其他文件的“using”关键字。

最佳答案

using 语句

using(var disposableObject = new object_that_implements_IDisposable()) { ... }

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

var disposableObject = new object_that_implements_IDisposable()
try
{
    ...
}
finally
{
    if(disposableObject != null)
    {
        ((IDisposable)your_object).Dispose();
    }
}

适用于实现 IDisposable 的类。这有助于清理您拥有对象的代码,例如系统资源(文件句柄、数据库连接、套接字等),在您完成为其余部分释放资源后需要清理这些资源系统。

理论上,您可以省去 .Dispose() 调用,但是您将不得不等待垃圾收集器释放保留的资源。 GC 非常擅长知道何时释放对象以回收其内存使用,但它不知道它需要释放对象才能让它们放弃其他系统资源。因此,在 GC 决定它需要所有者使用的内存之前,这些关键资源可能不会被放弃。因此,您肯定希望在用完元素后将其丢弃(如果它们是一次性的)!

至于为什么要使用using 而不是try/finally,这纯粹是编码人员的偏好。我更喜欢 using 因为你可以级联它们:

using(var a = new class())
using(var b = new class())
using(var c = new class())
using(var d = new class())
{
    ...
}

使用try/finally,您需要多写几行代码。

使用 还有其他优势。例如,如果 x 为 null,则直接调用 x.Dispose 可能会抛出 NullReferenceExceptionusing(x)不会的。

另见:

关于c# - Using(.....){...} 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136603/

相关文章:

c++ - `using` 基类默认行为的关键字

javascript - 我如何使用 javascript 获取有关用户用于访问我的 asp.net webapp 的设备的信息?

c# - 如何检查当前登录的用户是否正在使用漫游配置文件?

c# - 如果不使用 using 语句,IDisposable 内存会泄漏吗?

.net - 调用 Dispose 方法会清除和压缩 .Net 中的内存吗?

c++ - #include 指令和 "using"语句的顺序在 C++ 头文件的开头是否重要?

C# 套接字 : accept a socket, 忽略它的消息,发回一个

c# - 无法加载文件或程序集 Microsoft.ReportViewer.WebForms.XmlSerializers

c# - async/await 和 IDisposable 接口(interface)

c# - 使用 WCF 服务时,从 using 语句中返回是否是一种好的形式?