A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于振发 中级黑马   /  2013-9-26 09:27  /  1308 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于振发 于 2013-9-26 17:06 编辑

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

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

3 个回复

倒序浏览
using 关键字有两个主要用途:

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

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

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
我觉得是这样子的:
ADO.NET中的连接资源都实现了IDisposable接口,我们需要使用用using进行管理(释放)。在using的这对{}里边,我们会判断当前连接是否关闭,若是没有则会调用close()关闭,之后再进行资源释放。
我个人觉得你说的是成立的!
个人建议,希望能有帮助。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
你这里的SqlDataReader会在Using后的大括号中的代码执行完后释放掉,你的疑问主要是不理解Using的用法造成的,Using会在代码执行完后释放掉Using的资源,Using的内容一般都是非托管资源,即不能被GC(垃圾收集机制)收集的资源。释放时一般会先判读是否执行了close方法,如果没有执行,先执行close方法,最后在执行dispose方法释放资源。
只有实现了IDisposable接口的类才能进行Using,dispose方法也是在IDisposable接口中定义的。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马