如果你将: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级)。那么输出会是什么?
您的顶级类从System.Object
(C#alias object
)隐式继承。所以这基本上调用了object
的默认构造函数。但是,由于默认情况下默认调用基类的默认构造函数,因此不会更改任何内容。
所以
public A(int x)
: base()
{
}
和
public A(int x)
{
}
是等价的。
如果基类构造函数具有参数,则必须显式调用它以传递所需的参数。
默认情况下,所有类都继承自System.Object
类,因此在顶级类base()
中添加A
时,您正在调用对象类的构造函数,这将不会产生任何结果。