面向对象(八)-析构函数

2020-06-02 15:42:45 浏览数 (1)

析构函数
  • 定义: 简单来讲,析构函数,是用来帮助我们来进行废弃对象的内存回收的机制。
  • 语法
代码语言:javascript复制
 ~类名()
    {

    }
  • 示例
代码语言:javascript复制
class Car 
{ 
       ~Car() //析构函数
       {

       }
}
  • 注意点
代码语言:javascript复制
只能对类使用析构函数。
一个类只能有一个析构函数。
无法继承或重载析构函数。
无法调用析构函数。 它们是被自动调用的。
析构函数既没有修饰符,也没有参数。
不应使用空析构函数。 如果析构函数为空,只会导致不必要的性能损失。
  • 作用 程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。 垃圾回收器检查是否存在应用程序不再使用的对象。 如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。 程序退出时也会调用析构函数。 通常,与运行时不进行垃圾回收的开发语言相比,C# 无需太多的内存管理。 这是因为 .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。 但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。 当对象符合析构时,垃圾回收器将运行对象的Finalize方法。
  • 继承链中析构函数的释放顺序
代码语言:javascript复制
class First
        {
            ~First()
            {
                Console.WriteLine("First's destructor is called.");
            }
        }

        class Second : First
        {
            ~Second()
            {
                Console.WriteLine("Second's destructor is called.");
            }
        }

        class Third : Second
        {
            ~Third()
            {
               Console.WriteLine("Third's destructor is called.");
            }
        }

        class TestDestructors
        {
            static void Main()
            {
                Third t = new Third();
            }

        }
        /* Output :
            Third's destructor is called.
            Second's destructor is called.
            First's destructor is called.
        */

0 人点赞