在介绍编写封装有非托管资源的类时,通常建议下面的规范。显示调用Dispose和隐式调用Dispose的区别在于,显示调用要手工释放托管资源,这是什么道理?如何手工清理托管资源?请例示之,谢谢!
Public class MyClass:IDisposable  
{  
 private bool IsDisposed=false;  
 public void Dispose()  
 {  
  Dispose(true);  
  GC.SupressFinalize(this);  
 }  
 protected void Dispose(bool Diposing)  
 {  
  if(!IsDisposed)  
  {  
  if(Disposing)  
  {  
   //Clean Up managed resources  
  }  
  //Clean up unmanaged resources  
 }  
 IsDisposed=true;  
 }  
 ~MyClass()  
 {  
  Dispose(false);  
 }  
}

解决方案 »

  1.   

    使用using语句。
    using(...)
    {
      //do something
    }//执行到这里的时候.net会调用你的Dispose方法。
      

  2.   

    你解释的是怎样使用Dispose(),我的问题是怎样写这个函数的内容,
    if(Disposing)      
       {      
         //Clean  Up  managed  resources      
       }      
    Clean  Up  managed  resources是不是通常调用基类的Dispose就可以了
      

  3.   

    如果是基类实现System.IDisposable 接口,调用基类的Dispose,但是要先清理自己的先,基类的资源要清理,如果是自己实现这个接口,就不需要,也不能调用,如果Dispose不是自System.IDisposable继承而来的,使用using语句可能不能得到你想要的结果
      

  4.   

    if(Disposing)      
       {      
         obj.Dispose();
       }     
      

  5.   

    看下csdn里面两篇garbage collection的文章吧,finalization机制里面讲的很清楚的。
      

  6.   

    if(Disposing)  
      {  
       //Clean Up managed resources  
      } 注释里不就是显示的清除托管资料嘛..
    GC.SupressFinalize(this); 是为了不再自动调用析构函数.
    用户可以调用DISPOSE,如果忘了,还有析构函数来自动清除.其实上面的写法就是起到了保护的作用,建议用户用DISPOSE,但是如果没有用也没有关系.