为什么我的c#base构造函数不会被调用?

d11*_*d11 2 c#

public class Animal
{
    public Animal()
    {
        "animal ctor".Dump();
    }
}

public class Cat :Animal
{
    public Cat():this("gray")
    {
        "cat ctor".Dump();
    }

    public Cat(string c):base()
    {
        "cat ctor2".Dump();
    }
}

void Main()
{
    Cat a = new Cat();
}
Run Code Online (Sandbox Code Playgroud)

代码的输出是:

animal ctor
cat ctor2
cat ctor
Run Code Online (Sandbox Code Playgroud)

我理解第一行.

首先调用Animal Ctor,然后Cat ctor调用字符串重载public Cat(string c):base()- 但是这也是调用base的构造函数.

那么为什么我再也看不到animal ctor(:base())?

Sel*_*enç 5

构造函数只调用一次:

  1. 你的Cat()构造函数调用Cat(string c)
  2. Cat(string c)正在调用基础构造函数
  3. 基础构造函数被执行
  4. Cat(string c) 被执行(这是基地的来电者)
  5. 然后Cat()执行构造函数

基本上,如果你调用基础构造函数(或类中的另一个构造函数),那么在构造函数之前执行.请参阅文档以获取更多详细信息