使用using语句最终生成的其实是一个try, finally代码块,在finally代码块里释放资源。要求是:为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
你的问题其实可以这样解释:
在using中其实打开了一个数据库连接,然后从数据库中读取了某些数据,最后不管读取是否成功,都应该把这个数据库连接关闭掉。
传统的写法应该是在try块里打开连接并且读取,在finally块中把连接关闭掉,而由于你的sdr对象实现了IDisposable接口,所以C#允许你用using语句来代替这种写法,其实这就是一种语法糖,一种简便写法而已。
当程序运行完这个代码块(超出大括号的范围)后,sdr就会被自动关闭掉。
1.USING语句:定义一个范围,将在此范围之外释放一个或多个对象。
2.语法:
using (Font font1 = new Font("Arial", 10.0f))
{
}
3.C# 通过 .NET Framework 公共语言运行库 (CLR) 自动释放用于存储不再需要的对象的内存。内存的释放具有不确定性;一旦 CLR 决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源。
4.using 语句允许程序员指定使用资源的对象应当何时释放资源。为 using 语句提供的对象必须实现 IDisposable接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
5.可以在到达 using 语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出 using 语句。
就对于你上面这句话而言,因为数据库open之后,最后一定要close,即在代码最后写conn.close();但是用了using语句后,当执行完using语句中的代码,退出using语句时,close()方法会自动帮你执行,把数据库连接关闭。方便了代码的书写和以免程序员忘记关掉数据库连接。
C# 程序员参考
using 语句请参见
C# 关键字 | using 指令 | 实现 Finalize 和 Dispose 以清理非托管资源
using 语句定义一个范围,在此范围的末尾将处理对象。
using (expression | type identifier = initializer) statement
其中:
expression
希望在退出 using 语句时调用 Dispose 的表达式。
type
identifier 的类型。
identifier
type 类型的名称或标识符。定义一个以上 type 类型的 identifier 是可以的。在每一个 identifier = initializer 的前边都有一个逗号。
initializer
创建对象的表达式。
statement
嵌入的语句或要执行的语句。
备注
在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。
实例化的对象必须实现 System.IDisposable 接口。
using 引入名称空间或者使用非托管资源
其中引入名称空间通俗的说
就是我们程序中最顶部的代码
如:using System;
楼主取的例子应该是使用非托管资源,
我们一般使用的是托管资源,不用后系统会自动释放内存,
而有些我们自己定义的非托管资源就需要我们手动的去释放空间