析构函数能够销毁类内的指定实例,并释放这个实例所占用的内存。析构函数是C#类的特殊函数之一,在类名前面加上“~”字符即可构成析构函数的名称,具体格式如下:
~类名
析构函数具有如下三个特征。
没有返回值类型,也没有返回值。
没有参数。
一个类只能有一个析构函数。
C#的析构函数不能被显式调用,它是自动调用的。当程序内某个类的实例被认为不再有效、任何代码都不再使用它时,该实例就符合被销毁的条件。这样,它所对应的实例的析构函数就随时可能被调用,但是调用时机由公共语言运行时的垃圾回收机制确定,而不是由用户程序确定。
实例25:用析构函数输出指定的文本
下面通过一个具体的实例来说明使用析构函数的流程。本实例保存在“光盘:\daima\8”文件夹内,项目名为xigouhanshu。实例的功能是通过调用析构函数输出指定的文本。实例文件Program.cs的主要代码如下:
上述实例代码的设计流程如下。
1)分别定义类mm和B。
2)在类mm内分别定义静态构造函数mm()和析构函数mm()。
3)在类B内定义静态构造函数B()和析构函数~B()。(www.xing528.com)
4)定义函数nn(),输出指定的文本。
5)定义类B的对象实例cc,输出对应的结果。
执行后将首先输出显示默认的值,具体如图8-6所示。
图8-6 实例执行结果
当屏幕中输出“按Enter键退出程序...”时,B.nn()已经执行完毕,类A的对象bb已经无效。但是没有看见bb的析构函数被执行,既没有打印出“执行A的析构函数”。只有在退出程序之后,bb的析构函数才被执行,即先打印“退出Main()”,后打印“执行A的析构函数”。这说明,类A的对象bb在退出B.nn()后就无效了,它的析构函数就随时可能被调用,并不能确定它的调用时机。
多学一招
为了便于读者掌握,在此将C#构造函数和析构函数进行简要总结。
析构函数和构函数正好相反,构造函数和类同名,没有返回值。
析构函数在类名前加~,也没有返回值。
构函数是在对象创建时执行。
析构函数是在程序结束时执行。
一般情况下析构函数里面写的都是一些资源回收之类的东西。
C#析构函数的调用机制和C++不同,并不能保证每次都会调用,所以最好不要利用C#的析构函数来回收资源。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。