C#对象的销毁和IDisposable

  • 时间:
  • 浏览:0

Dispose最好的法子应该允许被调用多次而也能引发异常。也能给出比较安全的代码框架:

1.对象的析构函数与Finalize最好的法子

类的析构函数专用于清理非托管的资源,也能类需用提供三个 在应用多线程池池 上边可随时调用的“显式”清理资源的功能时,才需用实现IDisposable,然而CLR的GC还会自动调用对象的Dispose()最好的法子,只会调用Finalize最好的法子(也就在析构函数上边)

与构造函数什儿 ,子类的析构函数会自动调用基类的析构函数,由此不断上溯,到最顶层的Object。上边显示了基类的析构函数是在finally上边执行的,这是因为 销毁对象是先完成子类的清理工作,在完成基类的清理工作。是因为 基类也能定义析构函数,则跳过继续向上搜索。当CLR的GC要回收三个 定义了析构函数的对象时,它会自动调用Finalize最好的法子,之后 调用Finalize最好的法子的时机是不可控的,最好至少的最好的法子全都 让多线程池池 员主动以完全可控的最好的法子去释放非托管的资源(什儿 文件句柄,数据库连接)。为此,.NET提供了IDisposable。

C#提供了using关键来比较复杂上述代码。using(MyClass obj=new MyClass()){//使用obj}

与C++什儿 ,C#允许多线程池池 员为类定义三个 ”析构函数“:

public interface IDisposable {void Dispose();},是因为 CLR认为你什儿 接口全都 一般的接口,全都还会主动调用。这需用多线程池池 员去调用。为了补救资源泄漏,也能另三个 :

 上边的代码编译后,也能看一遍:

这里调用了Object类的Finalize最好的法子,你什儿 最好的法子上边是空的,哪几种可是能。

IDisposable编程模式:

读书笔记《.NET4.0面向对象编程漫谈》作者:金旭亮老师

IDisposable接口只定义了三个 Dispose最好的法子,任何三个 希望"手动"回收的非托管资源的类都应该实现该接口。