c#中IDisposable接口的使用方法-创新互联
本篇文章给大家分享的是有关c# 中IDisposable接口的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
龙岩网站建设公司成都创新互联,龙岩网站设计制作,有大型网站制作公司丰富经验。已为龙岩近1000家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的龙岩做网站的公司定做!C#的每一个类型都代表一种资源,而资源又分为两类:
- 托管资源 由CLR管理分配和释放的资源,即从CLR里new出来的对象。
- 非托管资源 不受CLR管理的对象,如Windows内核对象,或者文件、数据库连接、套接字、COM对象等。
如果类型用到了非托管资源,或者需要显式释放托管资源,那么需要让类型继承接口IDisposable。记住:如果类型需要显式释放资源,那么一定要继承IDisposable接口。如:
class SampleClass:IDisposable { private IntPtr nativeResource = Marshal.AllocHGlobal(100);//非托管资源 private Bitmap bitmap = new Bitmap(100, 100);//托管资源 private bool isDisposed = false; //实现IDisposable中的Dispose方法 public void Dispose( ) { Dispose(true); GC.SuppressFinalize(this);//通知垃圾回收器不用再调用终结器 } //不必要的方法,只是为了符合其他语言的规范 public void Close() { Dispose(); } //必须的,防止程序员忘记显示调用Dispose方法(隐式清理) ~SampleClass() { Dispose(false); } //非密封类修饰用protected virtual,提醒子类必须实现自己的清理方法时注意到父类的清理工作 protected virtual void Dispose(bool isDisposing) { if(isDisposed) { return; } if(isDisposing) { //清理托管资源 if(bitmap != null) { bitmap.Dispose(); bitmap = null; } } //清理非托管资源 if(nativeResource!=IntPtr.Zero) { Marshal.FreeHGlobal(nativeResource); nativeResource = IntPtr.Zero; } isDisposed = false; } public void SamplePublicMethod() { if(isDisposed) { throw new ObjectDisposedException("SampleClass", "SampleClass is disposed"); } //代码 } }
网站名称:c#中IDisposable接口的使用方法-创新互联
网址分享:http://myzitong.com/article/dsisgh.html