【发布时间】:2023-04-03 23:58:01
【问题描述】:
我试图理解但仍不确定。如果基类中有构造函数,派生类会一直调用它吗?我知道他们可以覆盖它(这里不是正确的术语,我知道 - 我的意思是向他们的构造函数添加代码)但我假设如果构造函数是在基类中定义的,那么派生的总是会调用它。这是真的吗?
【问题讨论】:
标签: c# inheritance constructor
我试图理解但仍不确定。如果基类中有构造函数,派生类会一直调用它吗?我知道他们可以覆盖它(这里不是正确的术语,我知道 - 我的意思是向他们的构造函数添加代码)但我假设如果构造函数是在基类中定义的,那么派生的总是会调用它。这是真的吗?
【问题讨论】:
标签: c# inheritance constructor
是的,如果有一个无参数的构造函数,它将总是被调用。如果有多个构造函数,可以使用base关键字选择调用哪一个:
class Parent {
public Parent() {}
public Parent(int x) {}
}
class Child : Parent {
public Child(int x) : base(x) {
}
}
如果有没有无参数构造函数,你将被强制这样做:
class Parent {
public Parent(int x) {}
}
class Child : Parent {
// This will not compile without "base(x)"
public Child(int x) : base(x) {
}
}
【讨论】:
base(x));使用base 只允许您选择将调用哪个,以及使用什么参数。
如果基类中只有一个无参构造函数,子类构造函数总是会先调用它。另一方面,如果您在基类中定义了其他构造函数,那么子类将有一个选项来调用哪个基构造函数。
【讨论】: