如果 :base() 在顶部 class 会发生什么?

What happens if you have :base() in the top class?

我无法理解如果将 :base() 放在顶部 class 会发生什么。代码是这样的...

class A {
 public A(): this(3) {
  Console.Write("1");
 }
 public A(int x): base() {
  Console.Write("{0}", x);
 }
}

class B:A {
 public B(): this(4) {
Console.Write("3");
 }
 public B(int x) {
  Console.Write("{0}", x):
 }
}

class C:B {
 public C(int x): base() {
  Console.Write("{0}", x):
 }
 public C(): this(7) {
  Console.Write("6");
 }
}

class Program {
 public static void Main(string[] args) {
   C c = new C();
  }

我不明白为什么我们需要从头开始 (class A)。那么输出结果是什么?

所有 classes 默认继承自 System.Object class 所以当在顶部 class A 添加 base() 时,你正在调用对象的构造函数 class,这不会导致任何结果。

您的顶级 classes 隐式继承自 System.Object(C# 别名 object)。所以这基本上调用了 object 的默认构造函数。但是由于默认情况下会调用基础 class 的默认构造函数,因此这不会改变任何内容。

所以

public A(int x)
    : base()
{
}

public A(int x)
{
}

是等价的。

如果基本 class 构造函数有参数,则必须显式调用它以传递所需的参数。

参见:Using Constructors (C# Programming Guide)