如果您在顶级类中有:base()会怎样?

时间:2018-09-09 15:10:56

标签: c# constructor this main base

我很难理解如果将:base()放在顶级类中会发生什么。代码像这样...

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();
  }

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

2 个答案:

答案 0 :(得分:4)

默认情况下,所有类都继承自System.Object类,因此,在顶级类base()中添加A时,您正在调用对象类的构造函数,这将不会导致任何后果。 / p>

答案 1 :(得分:2)

您的顶级类隐式继承自System.Object(C#别名object)。因此,这基本上调用了object的默认构造函数。但是,由于无论如何默认都会调用基类的默认构造函数,因此不会改变任何内容。

所以

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

public A(int x)
{
}

等效。

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

请参阅:Using Constructors (C# Programming Guide)