5.3.2
析构函数在类的实例超出范围时,为了确保它所占的资源能被回收,c#提供了析构函数专门用于释放被占用的系统资源。析构函数的名字与类名相同,只是在前面加上了一个符号"~"。在使用析构函数时,应注意以下几点:
■ 不能在结构中定义析构函数,只能对类使用析构函数。
■ 一个类只能有一个析构函数。
■ 无法继承或重载析构函数。
■ 无法调用析构函数,它们是被自动调用的。
■ 析构函数既没有修饰符,也没有参数。
我们无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。程序退出时也会调用析构函数。我们可以通过调用Collect强制进行垃圾回收,但大多数情况下应避免这样傲,因为这样会导致性能问题。
【例5.5】创建一个控制台应用程序项目,声明了三个类,分别成继承关系,说明析构函数的声明和何时将被自动调用,并且说明了调用顺序(Ch05Ex05)。
(1),首先创建一个控制台应用程序项目,在代码编辑器中打开源文件Program.cs,在命在旦夕名空间中声明三个内部类,类First是基类,Second类是从First类派生的,而Third类是从Second类派生的。代码如下:
class First
{
~First
{
Console.WriteLine(“First’s destructor is called.”);
}
}
class Second:First
{
~Second
{
Console.WriteLine(“Second destructor is called.”);
}
}
class Third: Second
{
~ Third
{
Console.WriteLine(“Third destructor is called.”);
}
}
(2),在Program类的Main方法中编写以下代码:
Third t=new Third(); //创建类的实例
(3),可按”Ctrl+F5”组合键编译并运行程序,最后程序的结果如图5.8所示。
此示例创建了三个类,这三个类构成了一个继承链,并且都有析构函数。在Main()中,创建了派生程度最大的类的实例。在程序运行时,这三个类的析构函数将自动被调用,注意调用顺序是按照从派生程度最大的到派生程序最小的次序调用的,和构造函数的调用顺序正好相反。