IDispose接口.cs

csharp

浏览数:186

2019-1-8


IDispose接口.cs

public class SampleClass : System.IDisposable
{
    private bool alreadyDisposed=false;
    //供程序员显式调用的Dispose方法
    public void Dispose()
    {
        //调用带参数的Dispose方法, 释放托管和非托管资源
        Dispose(true);
        //手动调用了Dispose释放资源,那么析构函数就是不必要的了, 这里阻止GC调用析构函数
        System.GC.SuppressFinalize(this);
    }

    //protected的Dispose方法, 保证不会被外部调用。
    //传入bool值disposing以确定是否释放托管资源
    protected void Dispose(bool disposing)
    {
        if (alreadyDisposed) return; //保证不重复释放

        if (disposing)
        {
            ///TODO:在这里加入清理"托管资源"的代码, 应该是xxx.Dispose();
        }
        ///TODO:在这里加入清理"非托管资源"的代码

        alreadyDisposed=true;
    }

    //供GC调用的析构函数
    ~SampleClass ()
    {
        Dispose(false);//释放非托管资源
    }
}