GC.SuppressFinalize()

作者:追风剑情 发布于:2018-1-23 16:49 分类:C#

示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test9
{
    class Program
    {
        static void Main(string[] args)
        {
            Test t = new Test();
            using (t)
            {
                Console.WriteLine("using");
            }//离开using会自动调用Dispose()
            Console.WriteLine("end");
            Console.Read();
        }
    }

    public class Test : IDisposable
    {
        protected bool disposed;

        public void Dispose()
        {
            Console.WriteLine("Dispose()");
            //这里手动释放所有资源(托管资源、非托管资源)
            Dispose(true);
            //告诉GC,销毁此对象时不要再调用终结器方法.因为资源已经在上面手动释放(托管资源、非托管资源)了.
            GC.SuppressFinalize(this);
        }

        public virtual void Dispose(bool disposeManagedResources)
        {
            if (!disposed)
            {
                if (disposeManagedResources)
                {
                    //TODO:: 释放拖管资源

                }
                //TODO:: 释放非托管资源

                disposed = true;
            }
        }

        //终结器方法(用来释放非托管资源)
        ~Test()
        {
            Console.WriteLine("Finalize");
            Dispose(false);
        }
    }
}

运行测试

99999.jpg

标签: C#

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号