代码改变世界

构建可终结类型和可处置类型

2013-05-14 15:14  无聊玩博客  阅读(216)  评论(0编辑  收藏  举报
class MyReSourceWrapper:IDisposable
    {
        private bool disposed = false;
        ~MyReSourceWrapper()
        {
            //在这里清除非托管资源
            CleanUp(false);
            Console.WriteLine("*******  In Finalize!*******");//仅仅为了测试
            //不要调用任何对象的Dispose()
        }

        public void Dispose()
        {
            //在这里清除资源
            CleanUp(true);
            Console.WriteLine("*******  In Dispise!*******");//仅仅为了测试

            //如果用户调用Dispose()就不需要终结,因此跳过终结
            System.GC.SuppressFinalize(this);
        }
        private void CleanUp(bool disposing)
        {
            //保证还没有被处置
            if (!this.disposed)
            {
                if (disposing)
                {
                    //释放托管的资源
                }
                //释放非托管资源
            }
            this.disposed = true;
        }
    }
  class Program
    {
      
        static void Main(string[] args)
        {
            MyReSourceWrapper rw1 = new MyReSourceWrapper();
            rw1.Dispose();//手动调用Dispose(),这不会调用终结器
            using (MyReSourceWrapper rw2 = new MyReSourceWrapper())
            { }//当使用支持IDisposable接口的.net类型时,这个句法结构将保证退出Using块时,
            //“正在使用的”对象将自动调用Dispose()方法
            MyReSourceWrapper rw3 = new MyReSourceWrapper();         
        }
     
    }