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
可能会抛出 NullReferenceException
,using(x)
不会的。
另见: