按照MSDN的定义,IDisposable接口是用作释放非托管资源的,但初看它的实例代码,给人一种IDisposable是用来释放托管资源的方法。
事实上,IDisposable接口的使用规则如下:
1.如果对象实现了IDisposable接口及其dispose方法,那么托管资源和非托管资源都由dispose来释放,最后不会调用析构函数。
2.如果dispose方法没有被调用,那么CLR就会调用析构函数,释放非托管资源。
以下就是实现IDisposable接口后对象调用的流程图:
问题释疑:
1、IDisposable接口为.net程序提供了资源(托管和非托管)释放的便利工具,加入对象调用程序不显示调用dispose方法,那么托管资源就不会被释放,从而会引发内存泄漏等问题。
2、采用dispose释放托管资源后,并不意味着对象它的生存周期已结束,你仍可以在其他地方引用它,这是于c++程序不同的地方。