回到目录

IDispose模式在C++中用的很多,用来清理资源,而在C#里,资源分为托管和非托管两种,托管资源是由C#的CLR帮助我们清理的,它是通过调用对象的析构函数完成的对象释放工作,而对于非托管系统来说,则需要我们自己来释放,例如数据库连接对象,这就需要我们手动去调用它的Dispose()方法来实现对象它的释放,事实上,Dispose()内容到底做了什么事,我们并不清楚,当然这就是面向对象,它不希望你关系实现的细节,呵!

对于我们开发人员来说,在了解它怎么用之后,总会对它如何实现的产生兴趣,下面,我将把C#里实现IDispose模式的代码展现出来,大家一起来学习一下,事实上,它的使用场合也很多的,当我们手动对网站,数据库作封装时,都会用的到,下面看一下代码:

 /// <summary>
/// 实现IDisposable,对非托管系统进行资源回收
/// </summary>
public class IDisplosePattern : IDisposable
{
public void Dispose()
{
this.Dispose(true);////释放托管资源
GC.SuppressFinalize(this);//请求系统不要调用指定对象的终结器. //该方法在对象头中设置一个位,系统在调用终结器时将检查这个位
} protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)//_isDisposed为false表示没有进行手动dispose
{
if (disposing)
{
//清理托管资源
}
//清理非托管资源
}
_isDisposed = true;
} private bool _isDisposed; ~IDisplosePattern()
{
this.Dispose(false);//释放非托管资源,托管资源由终极器自己完成了
}
}

通过上面的代码,我们知道了,对于托管系统(C#的CLR为我们管理的),直接通过~IDisplosePattern()方法进行释放,而~IDisplosePattern()这个方法何时被调用,我们是不知道的,因为它是由CLR帮助我们调用的,而我们手动进行dispose方法时,它会调用dispose(true)这个重载方法,它会帮助我们清理托管和非托管资源,如图:

aaarticlea/png;base64,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" alt="" />

回到目录

最新文章

  1. Linux内核@系统组成与内核配置编译
  2. 学习mongo系列(五) AND,$or,$type
  3. delphi 如何关闭 Unsafe typecast of 和 Unsafe type 的waring
  4. 微信支付配置信息,JSAPI接口,H5调用微信js接口支付,微信公众号支付
  5. Machine Learning - Lecture 16
  6. git将本地项目添加到github远程仓库
  7. [Swust OJ 648]--简单字典(数位dp)
  8. Codeforces Round #253 (Div. 1) (A, B, C)
  9. 用scala实现一个基于TCP Socket的快速文件传输程序
  10. 探究CSS中的包裹性
  11. MySQL服务找不到了,navicat打不开数据库连接
  12. 1016. Phone Bills (25) -vector排序(sort函数)
  13. asp.net core系列 24 EF模型配置(主键,生成值,最大长度,并发标记)
  14. 修改编辑器为Markdown编辑器
  15. Java并发编程笔记之ReentrantLock源码分析
  16. SQL记录-PLSQL条件控制
  17. 中秋节福利---HTML5-玉兔吃月饼游戏
  18. UVa 12230 &amp;&amp; HDU 3232 Crossing Rivers (数学期望水题)
  19. iview select下拉bug
  20. Qt error ------ incomplete type &#39;QApplication&#39; used in nested name specifier

热门文章

  1. crack.vbs病毒,优盘里所有文件全变成快捷方式
  2. 发现的eval的一个小问题
  3. 使用Wireshark 查看查找未被过滤端口
  4. 【线段树套平衡树】【pb_ds】bzoj3196 Tyvj 1730 二逼平衡树
  5. Linux下Bash入门学习笔记
  6. jQuery - plugin 代码模型
  7. 初学python第二天
  8. tomcat启动指定项目
  9. CentOS7 服务器 JDK+TOMCAT+MYSQL+redis 安装日志
  10. 几个非常有用的js小函数