释放资源的一般范式——更锋利的C#代码小记

public class Photo : IDisposable
{
//在Finalize函数中调用内部的Dispose方法
  ~Photo()
   {
     //被自动回收时仅释放托管资源,不释放非托管资源
      Dispose(false);
   }
   //提供了自命名的释放资源方法
   public void Close()
   {
    //当显式回收时则释放所有资源
      Dispose(true);
   }
    #region  IDisposable接口显式实现
        //显式实现IDisposable接口,避免同时出现Dispose方法和自定义命名方法(Close)
        public void IDisposable.Dispose()
        {
            //释放所有资源
            Dispose(true);
            //避免重复调用Finalize函数
            GC.SuppressFinalize(this);
        }
    #endregion
         //内部的Dispose方法,真正实施资源释放工作
        protected virtual void Dispose(bool disposing)
        {
            if(disposing==true)
            {
                //释放托管资源
            }
            //释放非托管资源
        }
}

 

posted @ 2016-09-12 09:52  Mydk  阅读(583)  评论(0)    收藏  举报