知识大全 析构函数用于销毁类的实例
Posted 函数
篇首语:志行万里者,不中道而辍足。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 析构函数用于销毁类的实例相关的知识,希望对你有一定的参考价值。
析构函数是通过下面的形式声明的 [attributes] ~ identifier( ) destructor body 其中
attributes(可选) 附加的声明性信息 有关属性和属性类的更多信息 请参见 C# 属性 identifier identifier 与类名相同 destructor body 包含销毁类实例的语句的块 备注 不能对结构使用析构函数 只能对类使用析构函数
一个类只能有一个析构函数
无法继承或重载析构函数
无法调用析构函数 它们是被自动调用的
析构函数既没有修饰符 也没有参数 例如 下面是类 MyClass 的析构函数的声明
~ MyClass() // Cleanup statements 该析构函数隐式地对对象的基类调用 Object Finalize 方法 这样 前面的析构函数代码被隐式地转换为
protected override void Finalize() try // Cleanup statements finally base Finalize(); 这意味着对继承链中的所有实例递归地(从派生相近程度最大的到派生相近程度最小的)调用 Finalize 方法
程序员无法控制何时调用析构函数 因为这由垃圾回收器决定的 垃圾回收器检查是否存在应用程序不再使用的对象 它认为这些对象符合销毁条件并回收这些对象占用的内存 程序退出时也会调用析构函数
可以通过调用 GC Collect 方法强制进行垃圾回收 但大多数情况下应避免这样做 因为这样会导致出现性能问题 有关更多信息 请参见强制垃圾回收
示例 下面的示例创建三个类 这三个类构成了一个继承链 类 First 是基类 Second 是从 First 派生的 而 Third 是从 Second 派生的 这三个类都有析构函数 在 Main() 中 创建了派生相近程度最大的类的实例 程序运行时 注意这三个类的析构函数会自动被调用 并且是按照从派生相近程度最大的到派生相近程度最小的次序调用
// Destructors csusing System;class First ~First() Console WriteLine( First s destructor is called ); class Second: First ~Second() Console WriteLine( Second s destructor is called ); class Third: Second ~Third() Console WriteLine( Third s destructor is called ); public class MainClass public static void Main() Third myObject = new Third(); 输出 Third s destructor is calledSecond s destructor is calledFirst s destructor is called 使用析构函数释放资源 一般来说 您不必像使用 C++ 时那样关注内存管理 这是因为 NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放 但是 当应用程序封装窗口 文件和网络连接这类非托管资源时 应当使用析构函数释放这些资源 当对象符合销毁条件时 垃圾回收器会运行对象的 Finalize 方法
cha138/Article/program/net/201311/13038相关参考