IDisposable

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.
// IDisposableの使用を通して、このクラスのinstancesは乏しい資源を
//使うことを注意させる
 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.
// Dispose方法が使ったかどうかを標示する
  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.
   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.  
 }
}

转载于:https://www.cnblogs.com/tyouketu/archive/2007/03/16/677649.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值