请问非托管资源应该怎样释放,思路是:继承IDispose接口,实现Dispose()方法。可有这样的实例吗?参考下

解决方案 »

  1.   

    如下示例,此模式被广泛应用在整个.NET Framework中
        class Obj: IDisposable
        {
            bool disposed;        ~Obj()
            {
    //被GC调用
     Dispose(false); }        public void Dispose()
            { 
    //用户调用
    Dispose(true); }        
            void Dispose(bool disposing)
            {
                if (!disposed)
                {
                    if (disposing)
                        ; //这里表明此方法被用户调用,这里释放所有托管资源(如调用其他对象的Dispose())
                    //释放任何非托管资源
    //防止用户调用后,GC再重复调用
                    GC.SuppressFinalize(this);
    //防止用户重复调用
                    disposed = true;
                }
            }
        }
      

  2.   

    晕,上面太乱,以为CSDN有自动缩进。下面这个整齐。如下示例,此模式被广泛应用在整个.NET Framework中    class Obj : IDisposable
        {
            bool disposed;        ~Obj()
            {
                //被GC调用
                Dispose(false);
            }        public void Dispose()
            {
                //用户调用
                Dispose(true);
            }
            void Dispose(bool disposing)
            {
                if (!disposed)
                {
                    if (disposing)
                    {
                        //这里表明此方法被用户调用,这里释放所有托管资源(如调用其他对象的Dispose())
                    }
                    //释放任何非托管资源
                    //防止用户调用后,GC再重复调用
                    GC.SuppressFinalize(this);
                    //防止用户重复调用
                    disposed = true;
                }
            }
        }
      

  3.   

    http://apps.hi.baidu.com/share/detail/5054319
      

  4.   

    错。只有托管资源才能被GC回收。
    非托管资源必须自行释放,所以才要用 Despose()。