析构函数用于析构类的实例 - さびしい.Net/Java技术与技巧 - CSDN博客

来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:09:02
析构函数用于析构类的实例 收藏
备注·         不能在结构中定义析构函数。只能对类使用析构函数。·         一个类只能有一个析构函数。·         无法继承或重载析构函数。·         无法调用析构函数。它们是被自动调用的。·         析构函数既没有修饰符,也没有参数。例如,下面是类 Car 的析构函数的声明:class Car{    ~ Car()  // destructor    {        // cleanup statements...    }} 
 该析构函数隐式地对对象的基类调用 Finalize。这样,前面的析构函数代码被隐式地转换为以下代码:protected override void Finalize(){    try    {        // Cleanup statements...    }    finally    {        base.Finalize();    }}
 这意味着对继承链中的所有实例递归地调用 Finalize 方法(从派生程度最大的到派生程度最小的)。注意:不应使用空析构函数。如果类包含析构函数,Finalize 队列中则会创建一个项。调用析构函数时,将调用垃圾回收器来处理该队列。如果析构函数为空,只会导致不必要的性能损失。
 程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。程序退出时也会调用析构函数。可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致性能问题。使用析构函数释放资源      通常,与运行时不进行垃圾回收的开发语言相比,C# 无需太多的内存管理。这是因为 .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法。资源的显式释放      如果您的应用程序在使用昂贵的外部资源,我们还建议您提供一种在垃圾回收器释放对象前显式地释放资源的方式。可通过实现来自 IDisposable 接口的 Dispose 方法来完成这一点,该方法为对象执行必要的清理。这样可大大提高应用程序的性能。即使有这种对资源的显式控制,析构函数也是一种保护措施,可用来在对 Dispose 方法的调用失败时清理资源。有关清理资源的更多详细信息,请参见下列主题:·         清理非托管资源 ·         实现 Dispose 方法 ·         using 语句(C# 参考) 示例下面的示例创建三个类,这三个类构成了一个继承链。类 First 是基类,Second 是从 First 派生的,而 Third 是从 Second 派生的。这三个类都有析构函数。在 Main() 中,创建了派生程度最大的类的实例。注意:程序运行时,这三个类的析构函数将自动被调用,并且是按照从派生程度最大的到派生程度最小的次序调用。class First{    ~First()    {        System.Console.WriteLine("First's destructor is called");    }} class Second: First{    ~Second()    {        System.Console.WriteLine("Second's destructor is called");    }} class Third: Second{    ~Third()    {        System.Console.WriteLine("Third's destructor is called");    }} class TestDestructors{    static void Main()     {        Third t = new Third();    }} 
 输出Third's destructor is called Second's destructor is called First's destructor is called 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aspnet2002web/archive/2010/12/18/6083399.aspx
析构函数用于析构类的实例 - さびしい.Net/Java技术与技巧 - CSDN博客 .NET播放音乐 - さびしい.Net/Java技术与技巧 - CSDN博客 精妙SQL语句收集 - さびしい.Net/Java技术与技巧 - CSDN博客 面试必须要知道的SQL语法,语句 - さびしい.Net/Java技术与技巧 - CSDN博... Session,ViewState用法 - さびしい.Net/Java技术与技巧 - CS... Java同步技术 (一) - IanGao的专栏 - CSDN博客 delphi用于时间操作的函数(1) - - JavaEye技术网站 delphi用于时间操作的函数 (2) - - JavaEye技术网站 基于JDBC的数据库连接池技术研究与应用 - java - CSDN技术中心 2011年.NET面试题总结---献给即将找工作的同行们 - さびしい.Net/Java技... 插件式设计的架构模型与实例 - Linux mobile development - CSDN博客 Java与.NET开发的Web Services相互调用的技术。 JAVA字符集 - java - CSDN技术中心 JAVA客户端通过SOAP与NET的 ChinaUnix.net - Java、Java Applet与 JavaScript间的通信 SQL Server 函数大全 - 该死的程序员 - CSDN博客 SQL Server 函数大全 - 该死的程序员 - CSDN博客 C语言字符串函数大全 - amossavez的专栏 - CSDN博客 敏捷软件开发11个原则 - (Java/C/Php/C /.NET) (OS,DB,Web,Net,Graph,Game) - CSDN博客 Java免费教程 Java源码下载 Java控件 Java实例基础 Java函数 PhotoShop的技巧与实例 程序员:提高编程效率的技巧 - CSDN.NET fms技术 - wanglilin2000的专栏 - CSDN博客 [观点]工程师在创业团队的技术挑战 - CSDN.NET - CSDN软件研发频道