我有一个类,它首先需要调用派生类构造函数,然后再调用基构造函数。我知道通过以下代码将首先调用基本构造函数:
public class A {
protected A () {
//do something
}
}
public class B : A {
public B () : base() {
//do something else
}
}
他们是颠倒该顺序的方法还是解决方法?其中一个可能的解决方案是,我们在基类中创建一个额外的 protected 方法(如 doConstructor()),并在第一个任务之后在派生构造函数中调用它,但对于只读字段来说这是不可能的,因为编译器不会接受它。 p>
最佳答案
没有直接的方法可以实现这一点。过去,我也遇到过这种情况,并使用 Initialize
方法来解决它。
public class A
{
protected A()
{
// Do pre-initialization here still.
Initialize();
}
protected virtual Initialize()
{
// Do all post-derived-class initialization here.
}
}
public class B : A
{
public B()
: base()
{
}
protected override Initialize()
{
// Do initialization between pre- and post- initialization here.
base.Initialize();
}
}
只要您遵循此处的预初始化、后初始化和正常初始化准则,它就可能相当安全并且符合良好实践。
关于c# - 通过继承构造函数来颠倒构造函数调用的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333903/