我试图了解但仍然不确定。如果基类中有构造函数,派生类将始终调用它?我知道他们可以覆盖它(这里不是正确的术语,我知道 - 我的意思是将代码添加到它们的构造函数中)但我假设如果构造函数是在基类中定义的,派生的构造函数将始终调用它。这是真的吗?
答案 0 :(得分:6)
是的,如果有一个无参数构造函数,它将始终被调用。如果有多个构造函数,您可以使用base
关键字选择要调用的构造函数:
class Parent {
public Parent() {}
public Parent(int x) {}
}
class Child : Parent {
public Child(int x) : base(x) {
}
}
如果有 no 无参数构造函数,您将强制执行此操作:
class Parent {
public Parent(int x) {}
}
class Child : Parent {
// This will not compile without "base(x)"
public Child(int x) : base(x) {
}
}
答案 1 :(得分:2)
如果基类中只有无参数构造函数,则子类构造函数将始终首先调用它。另一方面,如果你在基类中定义了其他构造函数,那么子类将有一个选项,用于调用基础构造函数。