黑马程序员技术交流社区

标题: C#中Dispose和Close的区别是什么啊 [打印本页]

作者: hongiqnglik    时间: 2013-8-3 22:25
标题: C#中Dispose和Close的区别是什么啊
C#中Dispose和Close的区别是什么啊,求解,谢谢
作者: 咖喱猫    时间: 2013-8-4 00:01
Dispose和Close基本上是一样的
.net的一些class只提供Close,而且派生自IDisposable,隐藏了Dispose方法。

参考:
http://www.cnblogs.com/kevinwan/archive/2007/01/16/621869.html
作者: 白天看见了月球    时间: 2013-8-4 00:33
Dispose()销毁对象
作者: 孔健    时间: 2013-8-4 00:45
Dispose 方法主要用来释放资源,而且一般不需要使用该方式来释放资源,只有当类中引用了非托管资源或是使用完需要立即释放的资源时可以使用Dispose方法来进行释放。
作者: zhangcheng5468    时间: 2013-8-4 10:04
        对于使用非内存资源的类,完全可以自己定义一个销毁资源的方法来供程序员回收,.net推荐实现IDisposable接口(为了规范非托管资源的回收),在Dispose方法中进行回收。
        实现了IDisposable接口的对象都可以使用using进行资源管理。更简单。using就是帮我们做了:
        实现了IDisposable接口的对象都要进行回收,否则很可能有内存泄露
        非托管内存资源才需要实现IDisposable
        使用using进行资源管理
        Dispose中通常会顺便调用Close,这只是实现类自己的行为,没人强求, IDisposable中的 Dispose方法根本不知道Close方法的存在,甚至可以没有close方法。(Close与Dispose关系 常考)。没有规定Dispose一定会调用Close方法,但是很多的实现了IDisposable接口的方法中,通常都是代为调用Close之类的方法。一般的close只是关闭,也许关闭后还能打开,但是Dispose一般就表示资源被回收了,再也没法用了。有的类可能没有close方法。

        Close和Dispose的区别:
        一个类如果实现IDisposable接口,则肯定有Dispose这个方法。
        但是一个类可以没有Close方法,也可以不叫Close。
        即使像SqlConnection、FileStream这种有Close也有Dispose方法的,IDisposable接口也没有约定Dispose必须帮助Close,只不过一般的Dispose的实现都判断是否Close,如果没有Close则帮助Close,但是这是好心、不是义务。





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