如果 :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 构造函数有参数,则必须显式调用它以传递所需的参数。
我无法理解如果将 :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 构造函数有参数,则必须显式调用它以传递所需的参数。