黑马程序员技术交流社区

标题: 黑马程序员-close和dispose [打印本页]

作者: 蓝汝逸    时间: 2012-3-27 17:37
标题: 黑马程序员-close和dispose
本帖最后由 蓝汝逸 于 2012-3-27 17:41 编辑

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

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

QQ截图20120327173748.jpg

作者: 柏云杉    时间: 2012-3-27 17:51
Close 只是关闭,还是可以再Open的。Dispose不仅是关闭,并且有销毁的意思。一旦Dispose就不存在了。
你可以试一下:
conn.Close();
conn.Open();
能够运行。

conn.Dispose();
conn.Open();  这就会报错。
作者: 张恒    时间: 2012-3-27 18:10
对这些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)方法。

作者: 孙秋生    时间: 2012-3-27 20:53
close(); 关闭了,还可以在open();打开;
dispose();直接销毁,不能再次使用的;
作者: 许前刚    时间: 2012-3-28 11:28
close是关闭数据库连接,但还可以再open,不用重新创建连接了。
dispose是毁灭数据库连接,不可以再open,要open必须重新创建连接。

作者: 孙树迁    时间: 2012-3-28 16:47
楼主,ado.net那部分视频里边,老师说的很清楚,看来你不怎么看吧,老师专门花很长时间,说close和dispose
作者: 蓝汝逸    时间: 2012-3-28 16:50
孙树迁 发表于 2012-3-28 16:47
楼主,ado.net那部分视频里边,老师说的很清楚,看来你不怎么看吧,老师专门花很长时间,说close和dispose  ...

:L我知道老师说的很清楚!我只不过是想要个实例而已!好理解点嘛!!
作者: 孙树迁    时间: 2012-3-28 17:29
蓝汝逸 发表于 2012-3-28 16:50
我知道老师说的很清楚!我只不过是想要个实例而已!好理解点嘛!!

so ga  ~~:)
作者: 蓝汝逸    时间: 2012-3-28 18:21
孙树迁 发表于 2012-3-28 17:29
so ga  ~~

:):handshake
作者: 张学良    时间: 2012-3-28 19:34
close()后还可以用open()打开,而dispose()里面包含了close(),运行的时候首先close然后再销毁连接,就不能再打开了。




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