帮我补充完整下面的代码, 该类里可能有非托管资源,要求程序运行后, Test 对象可以彻底释放    public class Test : IDisposable
{
    public void Dispose()
    {
        this.Dispose(true);
        System.GC.SupressFinalizer(this);
    }    public virtual void Dispose(bool disposing)
    {
         if (disposing) // 托管资源
         {
           在这里加什么代码 
         } 
  
    else {
            // 非托管资源
        
          在这里加什么代码          }
    }    ~Test()
    {
        this.Dispose(false);
    }
}

解决方案 »

  1.   


    if (disposing)
    {
       lock (this)
       {
           EventHandler handler1 = (EventHandler) this.events[Component.EventDisposed];//重点
           if (handler1 == null)
           {
               return;
           }
           handler1(this, EventArgs.Empty);
        }
    }注意结贴率
      

  2.   

    非托管资源如何释放,.NET Framework 提供 Object.Finalize 方法,它允许对象在垃圾回收器回收该对象使用的内存时适当清理其非托管资源。默认情况下,Finalize 方法不执行任何操作。默认情况下,Finalize 方法不执行任何操作。如果您要让垃圾回收器在回收对象的内存之前对对象执行清理操作,您必须在类中重写 Finalize 方法。然而大家都可以发现在实际的编程中根本无法override方法Finalize(),在C#中,可以通过析构函数自动生成 Finalize 方法和对基类的 Finalize 方法的调用。 例如:
    ~MyClass()
    {
        // Perform some cleanup operations here. 
    }
    //该代码隐式翻译为下面的代码。 
    protected override void Finalize()
    {
        try
        {
            // Perform some cleanup operations here. 
        }
        finally
        {
            base.Finalize();
        }
    }
      

  3.   

         
      比如说我在类里有一个这样的字段
      
      private WebBrowser _wb = new WebBrowser();
      

  4.   

    人家自己会释放,你只要调用_wb.Dispose()就可以了