.net 对象释放不会回收非托管资源,需实现dispose 模式
代码如下
 
dispose_职场        class a : IDisposable
dispose_职场        {
dispose_职场                bool disposed;
dispose_职场
dispose_职场                ~a()
dispose_职场                {
dispose_职场                        Dispose(false);
dispose_职场                }
dispose_职场
dispose_职场IDisposable 成员#region IDisposable 成员
dispose_职场
dispose_职场                public void Dispose()
dispose_职场                {
dispose_职场                        Dispose(true);
dispose_职场                        GC.SuppressFinalize(this);
dispose_职场                }
dispose_职场
dispose_职场                #endregion
dispose_职场
dispose_职场                protected virtual void Dispose(bool disposing)
dispose_职场                {
dispose_职场                        if (!disposed)
dispose_职场                        {
dispose_职场                                if (disposing)
dispose_职场                                {
dispose_职场
dispose_职场                                }
dispose_职场                                disposed = true;
dispose_职场                        }
dispose_职场                }
dispose_职场
dispose_职场                public void f()
dispose_职场                {
dispose_职场                        if (disposed)
dispose_职场                                throw new ObjectDisposedException("this");
dispose_职场                }
dispose_职场
dispose_职场                public void Close()
dispose_职场                {
dispose_职场                        Dispose();
dispose_职场                }
dispose_职场    
dispose_职场        }
dispose_职场
dispose_职场        class b : a
dispose_职场        {
dispose_职场                bool disposed;
dispose_职场
dispose_职场                ~b()
dispose_职场                {
dispose_职场                        Dispose(false);
dispose_职场                }
dispose_职场
dispose_职场                protected override void Dispose(bool disposing)
dispose_职场                {
dispose_职场                        try
dispose_职场                        {
dispose_职场                                if (!disposed)
dispose_职场                                {
dispose_职场                                        if (disposing)
dispose_职场                                        {
dispose_职场
dispose_职场                                        }
dispose_职场                                        disposed = true;
dispose_职场                                }
dispose_职场                        }
dispose_职场                        finally
dispose_职场                        {
dispose_职场                                base.Dispose(disposing);
dispose_职场                        }
dispose_职场                }
dispose_职场        }
 
重点:
用户主动释放需释放托管+非托管资源,且通知 GC 垃圾收走了,别来收了
 
析构释放仅回收非托管资源
 
功能实现需考察对象是否释放
 
使用语境下 close 或许是个更好的名字
 
传播该模式到派生类