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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝汝逸 黑马帝   /  2012-3-27 17:37  /  2600 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蓝汝逸 于 2012-3-27 17:41 编辑

close和dispose有什么相同点吗?那它们的不同点是什么?请举个例子说明一下,谢谢!

QQ截图20120327173748.jpg (2.38 KB, 下载次数: 57)

QQ截图20120327173748.jpg

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

9 个回复

倒序浏览
Close 只是关闭,还是可以再Open的。Dispose不仅是关闭,并且有销毁的意思。一旦Dispose就不存在了。
你可以试一下:
conn.Close();
conn.Open();
能够运行。

conn.Dispose();
conn.Open();  这就会报错。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
对这些class来说,关键在于它们显式的(explicitly)实现了IDisposable。对于隐式实现来说,你只需要调用"new A().Dispose()",但是对于显式实现来说,Dispose不会是这个class的成员函数。唯一的调用方式是你先要cast到 IDisposable才行。(“new A().Dispose()”编译不过,但是“((IDisposable)new A()).Dispose()”可以编译过)。所以这样就符合了设计的要求:提供Close(),隐藏Dispose(),并且实现了 IDisposable接口。

在.net的framework里,Close()被设计成public的,并且在Close()里面call被隐藏的Dispose(); Dispose()去call另一个virtual的Dispose(bool)函数。所以如果你从这个class继承,你就必须实现Dispose (bool)方法。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
close(); 关闭了,还可以在open();打开;
dispose();直接销毁,不能再次使用的;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
close是关闭数据库连接,但还可以再open,不用重新创建连接了。
dispose是毁灭数据库连接,不可以再open,要open必须重新创建连接。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
楼主,ado.net那部分视频里边,老师说的很清楚,看来你不怎么看吧,老师专门花很长时间,说close和dispose
回复 使用道具 举报
蓝汝逸 黑马帝 2012-3-28 16:50:43
7#
孙树迁 发表于 2012-3-28 16:47
楼主,ado.net那部分视频里边,老师说的很清楚,看来你不怎么看吧,老师专门花很长时间,说close和dispose  ...

:L我知道老师说的很清楚!我只不过是想要个实例而已!好理解点嘛!!
回复 使用道具 举报
蓝汝逸 发表于 2012-3-28 16:50
我知道老师说的很清楚!我只不过是想要个实例而已!好理解点嘛!!

so ga  ~~:)
回复 使用道具 举报
蓝汝逸 黑马帝 2012-3-28 18:21:51
9#
孙树迁 发表于 2012-3-28 17:29
so ga  ~~

:):handshake
回复 使用道具 举报
close()后还可以用open()打开,而dispose()里面包含了close(),运行的时候首先close然后再销毁连接,就不能再打开了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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