当我们开发C#代码的时候,经常碰到一个问题,有些class提供Close(),有些class提供Dispose(),那么Dispose和Close到底有什么区别?

  首先,Dispose和Close基本上应该是一样的。Close是为了那些不熟悉Dispose的开发者设计的。因为基本上所有的developer都知道Close是干吗的(特别是对于那些有C++背景的developer)。

  但是当我们写code时候,如果要实现Close和Dispose的时候,要注意Close和Dispose的设计模式。.net的一些class只提供Close,而且派生自IDisposable,并且隐藏了Dispose方法。是不是觉得很不明白了?

  对这些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)方法。

  调用者call Close()的时候就会call到你重载的那个Dispose(bool)方法去释放资源。

转载于:https://www.cnblogs.com/Yuqui1980/archive/2007/05/23/756791.html

[转] C#中Dispose和Close的区别相关推荐

  1. C#中Dispose和Close的区别

    当我们开发C#代码的时候,经常碰到一个问题,有些class提供Close(),有些class提供Dispose(),那么Dispose和Close到底有什么区别? 首先,Dispose和Close基本 ...

  2. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  3. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  4. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

  5. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  6. php $this self,php中self与$this的区别

    学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...

  7. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  8. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...

    昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...

  9. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

最新文章

  1. 协同过滤的itemCF,userCF区别适用场景
  2. neo4j-admin导入海量数据
  3. STM32F103ZE单片机在WWDG窗口看门狗的EWI中断中喂狗导致系统复位的原因及解决办法(中断函数重入问题)
  4. java单例模式(饿汉式和懒汉式的几种不同写法)
  5. 林斌减持小米股份三天套现3.4亿引关注 小米官方、林斌齐回应...
  6. zabbix企业应用之固定端口监控memcache
  7. 海思demo删减_从零开始在海思Hi3559a运行demo
  8. java 远程文件操作_java远程文件操作 - osc_88djj30s的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 笔记本给移动设备共享wifi
  10. k8s中使用基于nfs的storageclass
  11. Base64编解码工具
  12. Unity3d开发之十二:邮箱正则验证js和c#
  13. HTTPS为什么安全
  14. ROS TF 常用接口函数
  15. Python爬虫入门教程31:爬取猫咪交易网站数据并作数据分析
  16. 一行代码教你如何学会网络测速
  17. 算法 - 快速排序(Quick_sort)
  18. android生命周期测试
  19. 手把手教你如何使用网页翻译插件看懂英文文献
  20. 怎么把真人照片转漫画?快来收下这一招

热门文章

  1. 聪明的苹果——iPhone 3GS。
  2. 安装 Apache 2.4
  3. 计算机学校综合管理系统论文,学校综合管理系统的设计与实现毕业设计论文.doc...
  4. (98)Verilog HDL:流水灯设计
  5. Vivado生成bit文件出现error解决
  6. php 错误提示模板,php 关闭错误提示方法总结与性能分析
  7. cad2016中选择全图字体怎么操作_抖音上的书单都是用啥做的,抖音书单图片怎么做...
  8. Liunx静态库和动态库
  9. winsocket(1)
  10. cortex_m0架构(顶层AHB_Lite接口)