大马资讯论坛 - 马来西亚中文资讯平台

标题: C# 实现using 自创的 class 与自动清理非托管资源 [教学、范例] [打印本页]

作者: 资讯王    时间: 2012-9-26 21:28
标题: C# 实现using 自创的 class 与自动清理非托管资源 [教学、范例]
这篇是要教大家,如何释放自创的class资源。

using 语句可让程序设计人员指定使用资源的对象何时释放资源。提供给 using 语句的对象必须实作 IDisposable 接口。此接口提供 Dispose 方法,此方法会释放对象的资源。

当 using 语句到达结尾处时,或者当例外状况 (Exception) 掷回且程控权在语句结束之前已离开语句区块时,using 语句就可以结束。

对象可在 using 语句中宣告 (如上所示),或在 using 语句之前宣告,如下所示:
  1. using(MyClass instance = new MyClass())
  2. {
  3.     // Your cool code.
  4. }
复制代码
下面的代码示例演示实现 Dispose 的基本设计方案。
  1. public class MyClass : IDisposable
  2. {
  3.     private bool disposed;

  4.     /// <summary>
  5.     /// Construction
  6.     /// </summary>
  7.     public MyClass()
  8.     {
  9.     }

  10.     /// <summary>
  11.     /// Destructor
  12.     /// </summary>
  13.     ~MyClass()
  14.     {
  15.         this.Dispose(false);
  16.     }

  17.     /// <summary>
  18.     /// The dispose method that implements IDisposable.
  19.     /// </summary>
  20.     public void Dispose()
  21.     {
  22.         this.Dispose(true);
  23.         GC.SuppressFinalize(this);
  24.     }

  25.     /// <summary>
  26.     /// The virtual dispose method that allows
  27.     /// classes inherithed from this one to dispose their resources.
  28.     /// </summary>
  29.     /// <param name="disposing"></param>
  30.     protected virtual void Dispose(bool disposing)
  31.     {
  32.         if (!disposed)
  33.         {
  34.             if (disposing)
  35.             {
  36.                 // Dispose managed resources here.
  37.             }

  38.             // Dispose unmanaged resources here.
  39.         }

  40.         disposed = true;
  41.     }
  42. }
复制代码





欢迎光临 大马资讯论坛 - 马来西亚中文资讯平台 (http://www.freeinfo.com.my/) Powered by Discuz! X3.3