构造函数和析构函数(Constructors/Destructors)

·   ·   ·   ·

  ·   ·


构造函数

构造函数是一个类对象在被创建时自动调用的函数,通过创建一个和类名相同的函数来声明

  • 以上代码创建了 Myclass 类一个无参数的构造函数(默认构造函数)
    • 构造函数与包含它的类同名,且默认的构造函数没有参数
    • 不显式声明的情况下,默认将定义为 internal 类型的方法,将无法在派生类中调用
    • 一个类必须拥有一个默认的构造函数,如未定义,将隐式定义
    • 可以使用私有的构造函数,但将无法使用该构造函数创建实例对象
    • 可提供的构造函数数量无上限
    • 可使用构造函数初始化器(constructor initializer)在派生类的构造函数定义中指定所使用的基类构造函数

public class WBaseC1ass 
O references 
public MyBaseC1ass() 
1 reference 
public MyBaseC1ass(int i) 
O references 
public class WDerivedC1ass . 
myBaseC1ass 
O references 
public MyDerivedC1ass() 
. base(S) // base 
O references 
public MyDerivedC1ass(int i) 
this 
O references 
public MyDerivedC1ass(int i, 
int j)

如使用 MyDeivedClass a = new MyDeivedClass( ); 以上代码构造函数的执行顺序为:

  1. 先执行System.Object.Object( ) 构造函数
  2. 再执行MyBaseClass.MyBaseClass(int i) 构造函数
  3. 执行MyDeivedClass.MyDeivedClass( ) 构造函数

C++中的构造函数

在C++中,我们还可以使用 : 运算符来定义一个构造函数,具体代码如下

struct node{
    int u, v;

    node(int x, int y) : u(x), v(y){}; // 表示使用 x 初始化 u,使用 y 初始化 w
    // 与以下定义等价
    node(int x, int y)
    {
        u = x;
        v = y;
    }
}

析构函数

析构函数是一个类对象在被回收时被自动调用的函数,通过创建一个

带有 ~ 前缀的类名来声明

.yclass() 
// Constructor code

  • 以上代码创建了 Myclass 类的析构函数
    • 调用类的析构函数后,还会隐式调用其基类的析构函数,即会一直调用到 System.Object 的析构函数(该技术可以保证 System.Object 中的 Finalize( ) 函数一定会被调用)