这是MSDN的 接口说明
http://msdn.microsoft.com/zh-cn/library/system.idisposable.aspx
之前也提问过,现在重看,还是有一点迷糊。MSDN例子中的,资源释放代码如下
protected virtual void Dispose(bool disposing) { // Check to see if Dispose has already been called. if(!this.disposed) { // 为什么要加这个判断 if(disposing) { // Dispose managed resources. component.Dispose(); } // Call the appropriate methods to clean up // unmanaged resources here. // If disposing is false, // only the following code is executed. CloseHandle(handle); handle = IntPtr.Zero; // Note disposing has been done. disposed = true; } }
这个方法中的中文注释那,为什么要加那个判断。
先谈我的疑惑:
如果用户忘记调用公用的 Dispose方法,也不用担心,因为有析构函数,GC到时会调用析构函数,析构函数会调用 Dispose(false);但是有了 if(disposing) 判断,那不是component的非托管资源无法释放? 看到很多数据库连接释放也是在这个if下,为什么?
饮歌长啸
一只甜甜圈
慕婉清6462132
繁星点点滴滴
红颜莎娜
至尊宝的传说
12345678_0001
湖上湖
墨色风雨
aluckdog