黑马程序员技术交流社区

标题: 迷惑的C# using问题 [打印本页]

作者: 于振发    时间: 2013-9-26 09:27
标题: 迷惑的C# using问题
本帖最后由 于振发 于 2013-9-26 17:06 编辑

using (SqlDataReader reader=...)
{
...
}
============
如上所示:SqlDataReader对象是否还用在作用域内关闭对象,这种用法还是比较迷惑,希望各位能抽出点时间给我扫一下。

作者: 段朝骞    时间: 2013-9-26 12:51
using 关键字有两个主要用途:

作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。

作为语句,用于定义一个范围,在此范围的末尾将释放对象。
using(){}使用的对象必须要实现IDisposable接口,在using结束时释放对象资源

作者: Always.    时间: 2013-9-26 13:00
我觉得是这样子的:
ADO.NET中的连接资源都实现了IDisposable接口,我们需要使用用using进行管理(释放)。在using的这对{}里边,我们会判断当前连接是否关闭,若是没有则会调用close()关闭,之后再进行资源释放。
我个人觉得你说的是成立的!
个人建议,希望能有帮助。
作者: 淡忘回忆    时间: 2013-9-26 15:38
你这里的SqlDataReader会在Using后的大括号中的代码执行完后释放掉,你的疑问主要是不理解Using的用法造成的,Using会在代码执行完后释放掉Using的资源,Using的内容一般都是非托管资源,即不能被GC(垃圾收集机制)收集的资源。释放时一般会先判读是否执行了close方法,如果没有执行,先执行close方法,最后在执行dispose方法释放资源。
只有实现了IDisposable接口的类才能进行Using,dispose方法也是在IDisposable接口中定义的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2