.ctor&.cctor&对象的构造过程

.ctor 构造函数,在类被实例化时,它会被自动调用。

.cctor 类型初始化器,是一个静态方法,无参数无返回值,不能直接调用,最多只有一个

在继承中对象构造过程,看下面这段程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class A
{
    public int x = 1;
    public A() { m1(); }
    public void m1() { }
}

public class B : A
{
    public int y = 2;
    public static string sb = "B";
    public B() { m2(); }
    public void m2() { }
}

public class C : B
{
    public int z = 3;
    public static string sc = "C";
    public C() { m3(); }
    public void m3() { }
}

可以看到三者都有一个.ctor,B、C中有.cctor,而A没有,打开B,C的.cctor,可以看到它们都负责初始化自己的静态字段,现在主要来看它们的.ctor。

总结

  1. .ctor是构造方法;
  2. .cctor是类型初始化器,在C#中也就是静态构造函数;
  3. 当类C实例化时,会先对声明时就进行赋值的字段赋值,然后调用基类的构造函数,基类再以同样的方法构造自己,一直到顶层的System.Object,然后再回来执行C的显式构造方法中的代码,就是这么一个递归的过程。