博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类中实现 Dispose And Finalize
阅读量:4583 次
发布时间:2019-06-09

本文共 1933 字,大约阅读时间需要 6 分钟。

1.Dispose方法中,应该使用GC.SuppressFinalize防止GC调用Finalize方法,因为显示调用Dispose比较好。

2.Disposed字段保证了两次调用Dispose方法不会抛出异常。

3.同时实现Finalize方式和Dispose方式,一方面Dispose方法可以克服Finalize方法在性能上的弊端;另一方面,Finalize方法又能确保没有显式调用Dispose方法时,也自行回收使用的所有资源。

using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading.Tasks;namespace DisposeAndFinalize{    class FileDealer:IDisposable     {        //定义一个访问文件资源的Win32句柄        private IntPtr fileHandle;        //定义应用的托管资源        private ManagedRes managedRes;        //标记dispose是否已被调用        private bool Disposed = false;         //定义构造器,初始化托管资源和非托管资源        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(!Disposed )            {            if (disposing)            {                //清理托管资源                managedRes.Dispose();            }            //执行资源清理,在此为关闭对象句柄            if(fileHandle!=IntPtr.Zero)            {                CloseHandle(fileHandle);                fileHandle = IntPtr.Zero;            }            }            Disposed = true;        }        public void Close()        {            //在内部调用Dispose来实现            Dispose();        }        //实现对文件句柄的其他应用方法        public void Write() { }        public void Read() { }        //引入外部Win32API        [DllImport("Kernel32")]        private extern static Boolean CloseHandle(IntPtr handle);    }}

 

转载于:https://www.cnblogs.com/tylertang/p/4136896.html

你可能感兴趣的文章
如何辞职
查看>>
SSO 单点登录总结(PHP)
查看>>
Ubuntu16.04下将hadoop2.7.3源代码导入到eclipse neon中
查看>>
朝令夕改的企业不值得留恋
查看>>
springboot踩坑出坑记
查看>>
ovs源码阅读--netlink使用
查看>>
php中引用&的真正理解-变量引用、函数引用、对象引用
查看>>
cmake编译安装mysql 5.6.12
查看>>
第七章学习小结
查看>>
GS LiveMgr心跳管理类
查看>>
设计模式学习笔记(二)之观察者模式、装饰者模式
查看>>
mysql导出数据库和恢复数据库代码
查看>>
走出软件泥潭 第一回 雪上加霜
查看>>
小鸟哥哥博客 For SAE
查看>>
gui编程实践(3)--记事本界面 JMenuBar JMenu
查看>>
App测试方法总结
查看>>
51nod-1228: 序列求和
查看>>
BZOJ1303: [CQOI2009]中位数图
查看>>
2015上海马拉松线上跑感悟-人生如同一场马拉松
查看>>
北航软院2013级C#期末考试部分考题解答
查看>>