我很难理解如果将: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类)。那么输出是什么?
答案 0 :(得分:4)
默认情况下,所有类都继承自System.Object
类,因此,在顶级类base()
中添加A
时,您正在调用对象类的构造函数,这将不会导致任何后果。 / p>
答案 1 :(得分:2)
您的顶级类隐式继承自System.Object
(C#别名object
)。因此,这基本上调用了object
的默认构造函数。但是,由于无论如何默认都会调用基类的默认构造函数,因此不会改变任何内容。
所以
public A(int x)
: base()
{
}
和
public A(int x)
{
}
等效。
如果基类构造函数具有参数,则必须显式调用它以传递必需的参数。