看了一个帖子http://topic.csdn.net/u/20091029/08/20b3b82a-83ec-4d4f-997c-cf693f691a0d.html上面有段代码public class ResourceHolder : IDisposable
{
     private bool isDispose = false;
      
      // 显示调用的Dispose方法
  public void Dispose() 
      {
           Dispose(true);
          GC.SuppressFinalize(this); 
       }        // 实际的清除方法
  protected virtual void Dispose(bool disposing) 
       {
            if (!isDisposed)
          {
               if (disposing) 
           { 
                     // 这里执行清除托管对象的操作.
                  }
                  // 这里执行清除非托管对象的操作
            }
    
        isDisposed=true;
      }       // 析构函数 
      ~ResourceHolder()
      {
            Dispose (false);
      }
}看不懂啊,托管对象不是 不用程序员管的吗?

解决方案 »

  1.   

    Dispose是给非托管资源用的,析构函数是糊弄C++同学的...没有非托管资源这两个都不必理会...
      

  2.   

    非托管对象有close/dispose方法清楚,托管对象怎么清楚,看了N多这类文章和视频没一个有实例的.
      

  3.   

    非托管对象实现IDisposable接口在Dispose方法中清理,托管对象不需要清理...
      

  4.   

    不是文章在忽悠人,是你只懂皮毛不懂原理...去认真看看MSDN,理解了GC的工作机制你就明白了...
      

  5.   

    if (disposing) 

         // 这里执行清除托管对象的操作.
    }这个到底是什么意思
      

  6.   

    那只是教学用的例子,实际应用中没有任何意思也没有任何作用...去看书看MSDN吧,你的理解能力有待提高...
      

  7.   

            bool disposed = false;
            public void Dispose() { Dispose(true); }
            public void Close() { Dispose(true); }
            ~MyOleDb() { Dispose(false); }        void Dispose(bool b)
            {
                if (!disposed)
                {
                    if (odc != null) { odc.Close(); }
                    if (odcd != null) { odcd.Dispose(); }
                    if (oddr != null) { oddr.Close(); }                disposed = true;
                    if (b) { GC.SuppressFinalize(this); }
                }
            }我写的操作access的类的析构块,这样写没错吧?
      

  8.   

    不需要disposed变量,不需要析构函数...至于需不需要调用GC.SuppressFinalize方法得看具体情况...原因去看MSDN,理解GC的工作机制...