首页 理论教育 C#编程:使用析构函数销毁实例,释放内存

C#编程:使用析构函数销毁实例,释放内存

时间:2023-10-22 理论教育 版权反馈
【摘要】:析构函数能够销毁类内的指定实例,并释放这个实例所占用的内存。C#的析构函数不能被显式调用,它是自动调用的。实例25:用析构函数输出指定的文本下面通过一个具体的实例来说明使用析构函数的流程。实例的功能是通过调用析构函数输出指定的文本。析构函数和构函数正好相反,构造函数和类同名,没有返回值。析构函数在类名前加~,也没有返回值。析构函数是在程序结束时执行。

C#编程:使用析构函数销毁实例,释放内存

析构函数能够销毁类内的指定实例,并释放这个实例所占用的内存。析构函数是C#类的特殊函数之一,在类名前面加上“~”字符即可构成析构函数的名称,具体格式如下:

~类名

析构函数具有如下三个特征。

978-7-111-36370-5-Part02-139.jpg没有返回值类型,也没有返回值。

978-7-111-36370-5-Part02-140.jpg没有参数。

978-7-111-36370-5-Part02-141.jpg一个类只能有一个析构函数。

C#的析构函数不能被显式调用,它是自动调用的。当程序内某个类的实例被认为不再有效、任何代码都不再使用它时,该实例就符合被销毁的条件。这样,它所对应的实例的析构函数就随时可能被调用,但是调用时机由公共语言运行时的垃圾回收机制确定,而不是由用户程序确定。

实例25:用析构函数输出指定的文本

下面通过一个具体的实例来说明使用析构函数的流程。本实例保存在“光盘:\daima\8”文件夹内,项目名为xigouhanshu。实例的功能是通过调用析构函数输出指定的文本。实例文件Program.cs的主要代码如下:

978-7-111-36370-5-Part02-142.jpg

978-7-111-36370-5-Part02-143.jpg

上述实例代码的设计流程如下。

1)分别定义类mm和B。

2)在类mm内分别定义静态构造函数mm()和析构函数mm()。

3)在类B内定义静态构造函数B()和析构函数~B()。(www.xing528.com)

4)定义函数nn(),输出指定的文本。

5)定义类B的对象实例cc,输出对应的结果。

执行后将首先输出显示默认的值,具体如图8-6所示。

978-7-111-36370-5-Part02-144.jpg

图8-6 实例执行结果

当屏幕中输出“按Enter键退出程序...”时,B.nn()已经执行完毕,类A的对象bb已经无效。但是没有看见bb的析构函数被执行,既没有打印出“执行A的析构函数”。只有在退出程序之后,bb的析构函数才被执行,即先打印“退出Main()”,后打印“执行A的析构函数”。这说明,类A的对象bb在退出B.nn()后就无效了,它的析构函数就随时可能被调用,并不能确定它的调用时机。

多学一招

为了便于读者掌握,在此将C#构造函数和析构函数进行简要总结。

978-7-111-36370-5-Part02-145.jpg析构函数和构函数正好相反,构造函数和类同名,没有返回值。

978-7-111-36370-5-Part02-146.jpg析构函数在类名前加~,也没有返回值。

978-7-111-36370-5-Part02-147.jpg构函数是在对象创建时执行。

978-7-111-36370-5-Part02-148.jpg析构函数是在程序结束时执行。

978-7-111-36370-5-Part02-149.jpg一般情况下析构函数里面写的都是一些资源回收之类的东西。

978-7-111-36370-5-Part02-150.jpgC#析构函数的调用机制和C++不同,并不能保证每次都会调用,所以最好不要利用C#的析构函数来回收资源。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈