最佳 .NET 资源清理策略

class FileDealer: IDisposable
{ 
    //定义一个访问文件资源的Win32句柄
    private IntPtr fileHandle;
    //定义引用的托管资源
    private ManagedRes managedRes; 

    //定义构造器,初始化托管资源和非托管资源 
    public FileDealer(IntPtr handle, ManagedRes res) 
    { 
        fileHandle = handle;
        managedRes = res; 
    }

    //实现终结器,定义Finalize 
    ~FileDealer() 
    { 
        if (fileHandle != IntPtr.Zero) 
        { 
            Dispose(false); 
        } 
    } 

    //实现IDisposable接口 
    public void Dispose() 
    { 
        Dispose(true); 
        //阻止GC调用Finalize方法
        GC.SuppressFinalize(this); 
    } 

    //实现一个处理资源清理的具体方法 
    protected virtual void Dispose(bool disposing) 
    { 
        if (disposing) 
        { 
            //清理托管资源 
            managedRes.Dispose(); 
        } 

        //执行资源清理,在此为关闭对象句柄
        if (fileHandle != IntPtr.Zero) 
        { 
            CloseHandle(fileHandle); 
            fileHandle = IntPtr.Zero; 
        } 
    } 

    public void Close() 
    { 
        //在内部调用Dispose来实现 
        Dispose(); 
    } 

    //实现对文件句柄的其他应用方法 
    public void Write() { } 
    public void Read() { } 

    //引入外部Win32API 
    [DllImport("Kernel32")] private extern static Boolean CloseHandle(IntPtr handle); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值