关于析构函数和IDisposable接口

王朝c#·作者佚名  2006-12-17
宽屏版  字体: |||超大  

关于析构函数和IDisposable接口

关于析构函数和IDisposable接口 析构函数的特点:

1、总是由CLR调用,所以可以确保它一定会被调用

2、没有参数,没有修饰符

3、调用的时候可以假定所有托管资源已经释放

4、通过析购函数删除对象,会延迟对象在内存中删除的时间

5、由于是由CLR调用所以,不确定什么时候会被调用。所以一些稀缺的资源

不能在析构函数中才释放

6、没有析构函数的对象,垃圾收集起一次完成清理工作

有析构函数的对象,需要两次次能完成其理工作。会影响系统性能

+++++++++++++++++++++++++++++++++++++++++++++

IDispose()接口

1、它提供了一个模式,具有语言级的支持(见using语句)

2、它里面声明了一个方法Dispose()没有参数,返回值为void

3、它为释放托管资源和非托管资源提供了确定的机制

允许用户控制资源的释放时间,但需要确保该函数被调用

如果用户没有调用Dispose()方法,可以在析构函数中确保非托管资源被释放

++++++++++++++++++++++++++++++++++++++++++++++

两者各有特点,可以使它们共同工作。以达到最好的效果

例:

public MyClass : IDisposeable

{

private bool hasDisposed = false;

public void Dispose()

{

Dispose(true)

GC.SuppressFinalize(this);

}

protected virtual void Dispose(bool disposing)

{

if(!hasDispose)

{

if(disposing)

{

// 释放托管资源

}

// 释放非托管资源

}

hasDispose = true;

}

~MyClass()

{

Dispose(false);

}

}

欢迎拍转

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有