也谈IDisposable接口(二)
来源:互联网 发布:那曲数控编程人才网 编辑:程序博客网 时间:2024/05/17 23:19
关于资源释放,最后一点需要提的是Close函数。在语义上它和Dispose很类似,按照MSDN的说法,提供这个函数是为了让用户感觉舒服一点,因为对于某些对象,例如文件,用户更加习惯调用Close()。
然而,毕竟这两个函数做的是同一件事情,因此MSDN建议的代码就是:
- public void Close()
- {
- Dispose(();
- }
这里直接调用不带参数的Dispose函数以获得和Dispose相同的语义。这样似乎就圆满了,但是从另外一方面说,如果同时提供了Dispose和Close,会给用户带来一些困惑。没有看到代码细节的前提下,很难知道这两个函数到底有什么区别。因此在.NET的代码设计规范中说,这两个函数实际上只能让用户用一个。因此建议的模式是:
- public class BaseResource: IDisposable
- {
- public void Close()
- {
- Dispose();
- }
- void IDisposable.Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- protected virtual void Dispose(bool disposing)
- {
- // 同前
- }
- }
这里使用了一个所谓的接口显式实现:void IDisposable.Dispose()。这个显式实现只能通过接口来访问,但是不能通过实现类来访问。因此:
- BaseResource baseRes= new BaseResource ();
- baseRes.Dispose(); // 错误
- (baseRes as IDisposable).Dispose(); // 正确
这样做到了兼顾两者。对于喜欢使用Close的人,可以直接用 baseRes.Close(),并且他看不到 Dispose()。对于喜欢Dispose的,他可以把类型转换为 IDisposable 来调用,或者使用using语句。两者皆大欢喜!
- 也谈IDisposable接口(二)
- 也谈IDisposable接口(一)
- 也谈IDisposable接口(三)
- 也谈IDisposable接口(四)
- IDisposable 接口
- IDisposable 接口
- IDisposable 接口
- IDisposable接口
- IDisposable 接口
- IDisposable接口的使用
- 正确实现 IDisposable 接口
- IDisposable 接口介绍
- 正确实现 IDisposable 接口
- 正确实现 IDisposable 接口
- 正确实现 IDisposable 接口
- 正确实现 IDisposable 接口
- IDisposable接口的理解
- C# IDisposable 接口
- 关于Oracle与SqlServer中获取所有字段、主键、外键的sql语句
- 《躲避崇高》(王蒙)
- ubuntu下eclipse打开java文件,注释内容为乱码,解决方法。
- 谷歌李开复:我的传奇人生源于十句箴言
- asp.net 中listbox 中的项删除
- 也谈IDisposable接口(二)
- 会话EJB完整开发过程(以weblogic为服务器)
- Java与其他语言的互操作性
- 将小写金额转换成人民币大写金额
- 生日快乐! ^_^
- 池内春秋,Memory Pool 的设计哲学与无痛运用
- WebLogic的初步研究(1)--安装篇
- WebLogic的初步研究(2)--结构篇
- 为不同的 Appender 设置日志输出级别: