如果您在顶级类中拥有:base()会发生什么?

问题描述 投票:2回答:2

如果你将: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级)。那么输出会是什么?

c# constructor this main base
2个回答
2
投票

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

所以

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

public A(int x)
{
}

是等价的。

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

见:Using Constructors (C# Programming Guide)


4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.