close与dispose区别
当我们开发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)方法去释放资源。
最新文章
- ASP.NET MVC5----基本用法
- Linux学习笔记(二)
- Elasticsearch入门必备——ES中的字段类型以及常用属性
- pku 1703(种类并查集)
- STL中vector容器实现反转(reverse)
- 258. Add Digits
- 电商安全无小事,如何有效地抵御 CSRF 攻击?
- 【HBase学习】Apache HBase 参考手册 中文版
- innodb_support_xa
- NHibernate 帮助类(单例实际运用)
- Android 打造自己的个性化应用(四):仿墨迹天气实现-->;自定义扩展名的zip格式的皮肤
- Selenium来抓取动态加载的页面
- 用于主题检测的临时日志(18506589-369d-4505-a204-3678db17eae5 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- linux基础命令大全
- 【JAVAWEB学习笔记】22_ajax
- 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)
- Docker 案例: 在容器中部署静态网站
- 如何在vue单页应用中使用百度地图
- Hibernate的注解和检索
- JQuery限制文本框只能输入数字和小数点的方法
热门文章
- SQL server 安装教程
- java实验报告&;第三周学习总结
- RAC_单实例_DG 关于两端创建表空间数据文件路径不一致的问题注意点
- leetcode206 反转链表 两种做法(循环,递归)
- NIO组件之channel
- 使用事件CreateEvent注意事项 多进程同步的方法
- 【SpringMVC】---RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数
- Java多线程学习——例子:模拟电影院抢座位
- ssh远程连接linux服务器并执行命令
- python每日一练:0005题