可能重复:
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,但它提供了'using'关键字,用于包含dll和其他文件。
答案 0 :(得分:33)
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
,您需要更多行代码。
using
还有其他优点。例如,如果x.Dispose
为空,则直接调用NullReferenceException
可能会抛出x
,而using(x)
则不会。{/ p>
另见:
答案 1 :(得分:4)
using
只是指示编译器编写代码,该代码将使用对您使用的变量调用Dispose
方法。只有实现“IDisposable”的类型才能与using
语句一起使用。
在您的示例中,当{}中的代码完成时,将处理cmd2。
答案 2 :(得分:2)
“定义范围,在其范围之外将放置一个或多个对象” 见using statement
答案 3 :(得分:2)
using
适用于实施IDisposable
的对象。它确保在离开using
块时(无论是正常的,还是通过异常,等等),都会调用一次性对象的Dispose
方法。
答案 4 :(得分:0)
使用语句定义一个范围,在其外部将处理一个或多个对象。
答案 5 :(得分:0)
使用是清理资源的一种很酷的方式,它相当于try {} catch {} finally {dispose}。有效的c#有一个项目,我打赌你会得到10个以上类似的答案。
http://www.amazon.com/Effective-Specific-Ways-Improve-Your/dp/0321245660
答案 6 :(得分:0)
using
语句定义了使用实现IDisposable接口的对象的范围。退出块后,将清理对象。参见:
答案 7 :(得分:0)
请参阅http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx
using语句将变量封装在范围内。当执行退出using块时,其中的所有对象都从内存中释放出来。您可能会看到它与数据库连接,以便当使用块退出时,清理和关闭分配给该连接的资源。