- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C# 实现 Finalize 和 Dispose 以清理非托管资源
2009-10-24 00:59
// Design pattern for a base class.public class Base: IDisposable{?? //Implement IDisposable.?? public void Dispose() ?? {???? Dispose(true);????? GC.SuppressFinalize(this); ?? }?? protected virtual void Dispose(bool disposing) ?? {????? if (disposing) ????? {???????? // Free other state (managed objects).????? }????? // Free your own state (unmanaged objects).????? // Set large fields to null.?? }?? // Use C# destructor syntax for finalization code.?? ~Base()?? {????? // Simply call Dispose(false).????? Dispose (false);?? }}// Design pattern for a derived class.public class Derived: Base{?? ?? protected override void Dispose(bool disposing) ?? {????? if (disposing) ????? {???????? // Release managed resources.????? }????? // Release unmanaged resources.????? // Set large fields to null.????? // Call Dispose on your base class.????? base.Dispose(disposing);?? }?? // The derived class does not have a Finalize method?? // or a Dispose method without parameters because it inherits?? // them from the base class.}
下面的规则概括了 Finalize 方法的使用准则:
仅在要求终结的对象上实现 Finalize。存在与 Finalize 方法相关的性能开销。
如果需要 Finalize 方法,应考虑实现 IDisposable,以使类的用户可以避免因调用 Finalize 方法而带来的开销。
不要提高 Finalize 方法的可见性。该方法的可见性应该是 protected,而不是 public。
对象的 Finalize 方法应该释放该对象拥有的所有外部资源。此外,Finalize 方法应该仅释放由该对象控制的资源。Finalize 方法不应该引用任何其他对象。
不要对不是对象的基类的对象直接调用 Finalize 方法。在 C# 编程语言中,这不是有效的操作。
应在对象的 Finalize 方法中调用基类的 Finalize 方法。
下面的规则概括了 Dispose 方法的使用准则:
在封装明确需要释放的资源的类型上实现释放设计方案。用户可以通过调用公共 Dispose 方法释放外部资源。
在通常包含控制资源的派生类型的基类型上实现释放设计方案,即使基类型并不需要也如此。如果基类型有 Close 方法,这通常指示需要实现 Dispose。在这类情况下,不要在基类型上实现 Finalize 方法。应该在任何引入需要清理的资源的派生类型中实现 Finalize。
使用类型的 Dispose 方法释放该类型所拥有的所有可释放资源。
对实例调用了 Dispose 后,应通过调用 GC..::.SuppressFinalize 禁止 Finalize 方法运行。此规则的一个例外是当必须用 Finalize 完成 Dispose 没有完成的工作的情况,但这种情况很少见。
如果基类实现了 IDisposable,则应调用基类的 Dispose 方法。
不要假定 Dispose 将被调用。如果 Dispose 未被调用,也应该使用 Finalize 方法释放类型所拥有的非托管资源。
当资源已经释放时,在该类型上从实例方法(非 Dispose)引发一个 O
您可能关注的文档
- AutoCAD2012建筑绘图及三维建模 教学课件 作者 高丽燕、莫正波工业三级评分标准 工业产品CAD技能三级第6期试题及其评分标准 20110518.doc
- AutoCAD2012中文版实例教程 第2版 教学大纲作者 杨静 余妹兰 大纲.doc
- AutoCAD2012中文版室内设计实例教程 第2版 教学大纲 作者 张宁 李文英 大纲.doc
- AutoCAD2013实用教程 教学课件 作者 郝坤孝吕安吉季阳萍 编著 第1章 AutoCAD2013的基础知识.ppt
- C#编程和.NET框架 教学课件 作者 崔建江 第2章 使用控件创建Windows窗体程序 NO2.ppt
- AutoCAD2013实用教程 教学课件 作者 郝坤孝吕安吉季阳萍 编著 第2章 图层设置和图形辅助功能的使用.ppt
- C#编程和.NET框架 教学课件 作者 崔建江 第3章 什么是装箱和拆箱.doc
- C#编程和.NET框架 教学课件 作者 崔建江 第4章 静态方法.doc
- C#编程和.NET框架 教学课件 作者 崔建江 第4章 静态字段.doc
- C#编程和.NET框架 教学课件 作者 崔建江 第4章 面向对象.ppt
文档评论(0)