使用析构函数释放资源
析构函数用于析构类的实例。
1) 不能在结构中定义析构函数。只能对类使用析构函数。
2) 一个类只能有一个析构函数。
3) 无法继承或重载析构函数。
4) 无法调用析构函数。它们是被自动调用的。
5) 析构函数既没有修饰符,也没有参数。
例如,下面是类 Car 的析构函数的声明:
class Car
{
/// <summary>
/// 析构函数
/// </summary>
~Car()
{
// cleanup statements...
}
}
该析构函数隐式地调用对象基类的
Finalize 。这样,该析构函数被隐式地转换为如下代码:
protected override void Finalize()
{
try
{
// Cleanup statements...
}
finally
{
base.Finalize();
}
}
这意味着对继承链中的所有实例递归地调用
Finalize 方法。
说明:不要使用空的析构函数。如果类包含析构函数,则 Finalize 队列中则会创建一个项。当调用析构函数时,将调用垃圾回收器(GC)来处理该队列。如果析构函数为空,只会导致不必要的性能损失。
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有的话),回收该对象的内存。程序退出时也会调用析构函数。
可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为会导致性能问题。
通常,.NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但当应用程序封装窗口、文件和网络连接这类非托管资源时,应使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法。
虽然垃圾回收器可以跟踪封装非托管