在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一,什么是析构函数? 在msdn中的解析:析构函数用于析构类的实例。 class A // 基类First { ~A() // 析构函数 { Console.WriteLine("~A()析构函数"); } } 特性: 1》不能在结构中定义析构函数。 只能对类使用析构函数。 2》一个类只能有一个析构函数。 3》无法继承或重载析构函数。 4》无法调用析构函数。 它们是被自动调用的。 5》析构函数既没有修饰符,也没有参数。 二,使用析构函数的有什么用? 一,程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。 垃圾回收器检查是否存在应用程序不再使用的对象。 如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。 程序退出时也会调用析构函数。 二,使用析构函数释放资源 三,那析构函数和构造函数有什么区别?先上代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace XigouMethod { class Program { static void Main(string[] args) { C c = new C(); // 创建类的实例 } class A // 基类First { ~A() // 析构函数 { Console.WriteLine("~A()析构函数"); } public A() { // 构造函数 Console.WriteLine("A()构造函数"); } } class B : A // B类从A类派生 { ~B() // 析构函数 { Console.WriteLine("~B()析构函数"); } public B() // 构造函数 { Console.WriteLine("B()构造函数"); } } class C : B // C类从B类派生 { ~C() // 析构函数 { Console.WriteLine("~C()析构函数"); } public C() // 构造函数 { Console.WriteLine("C()构造函数"); } } } } 结果:
四,总结: 1》程序运行时,这三个类的析构函数将自动被调用,调用顺序是按照从派生程度最大的(~C())到派生程度最小的(~A())次序调用的,和构造函数的调用顺序正好相反。则可以得出,当用户创建类的对象是调用构造函数,而当该对象已经调用完毕时,使用析构函数 2》析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。 3》析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。 4》如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。 |
请发表评论