Jam*_*ery 7 c# idisposable using using-statement
只是想知道这意味着什么?我在网上看过很多具有以下语法的教程:
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决定需要所有者使用的内存之后,才可能放弃这些关键资源.因此,当你完成它们(如果它们是一次性的)时,你肯定想要处理它们!
至于为什么你会使用using在try/ 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)不会.
也可以看看:
| 归档时间: |
|
| 查看次数: |
8451 次 |
| 最近记录: |