the implements of IDisposable interface Sample

 

using  System;
using  System.ComponentModel;

//  The following example demonstrates how to create
//  a resource class that implements the IDisposable interface
//  and the IDisposable.Dispose method.

public   class  DisposeExample
{
    
//  A base class that implements IDisposable.
    
//  By implementing IDisposable, you are announcing that 
    
//  instances of this type allocate scarce resources.
     public   class  MyResource: IDisposable
    {
        
//  Pointer to an external unmanaged resource.
         private  IntPtr handle;
        
//  Other managed resource this class uses.
         private  Component component  =   new  Component();
        
//  Track whether Dispose has been called.
         private   bool  disposed  =   false ;

        
//  The class constructor.
         public  MyResource(IntPtr handle)
        {
            
this .handle  =  handle;
        }

        
//  Implement IDisposable.
        
//  Do not make this method virtual.
        
//  A derived class should not be able to override this method.
         public   void  Dispose()
        {
            Dispose(
true );
            
//  This object will be cleaned up by the Dispose method.
            
//  Therefore, you should call GC.SupressFinalize to
            
//  take this object off the finalization queue 
            
//  and prevent finalization code for this object
            
//  from executing a second time.
            //这里析构函数在编译的时候回自动被翻译成为Finalize()函数,GC在执行清理之前会调用Finalize方法
            //来实现对非托管资源的清理.
            GC.SuppressFinalize( this );
        }

        
//  Dispose(bool disposing) executes in two distinct scenarios.
        
//  If disposing equals true, the method has been called directly
        
//  or indirectly by a user's code. Managed and unmanaged resources
        
//  can be disposed.
        
//  If disposing equals false, the method has been called by the 
        
//  runtime from inside the finalizer and you should not reference 
        
//  other objects. Only unmanaged resources can be disposed.
         private   void  Dispose( bool  disposing)
        {
            
//  Check to see if Dispose has already been called.
             if ( ! this .disposed)
            {
                
//  If disposing equals true, dispose all managed 
                
//  and unmanaged resources.
                 if (disposing)
                {
                
//  Dispose managed resources.
                component.Dispose();
                }
             
                
//  Call the appropriate methods to clean up 
                
//  unmanaged resources here.
                
//  If disposing is false, 
                
//  only the following code is executed.
                CloseHandle(handle);
                handle 
=  IntPtr.Zero;            
            }
            disposed 
=   true ;         
        }

        
//  Use interop to call the method necessary  
        
//  to clean up the unmanaged resource.
        [System.Runtime.InteropServices.DllImport( " Kernel32 " )]
        
private   extern   static  Boolean CloseHandle(IntPtr handle);

        
//  Use C# destructor syntax for finalization code.
        
//  This destructor will run only if the Dispose method 
        
//  does not get called.
        
//  It gives your base class the opportunity to finalize.
        
//  Do not provide destructors in types derived from this class.
         ~ MyResource()      
        {
            
//  Do not re-create Dispose clean-up code here.
            
//  Calling Dispose(false) is optimal in terms of
            
//  readability and maintainability.
            Dispose( false );
        }
    }
    
public   static   void  Main()
    {
        
//  Insert code here to create
        
//  and use the MyResource object.   
    }
}

另外可以参考下面的这篇文章,写的相当的精辟:
http://blog.youkuaiyun.com/knight94/archive/2006/08/05/1023352.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值