我有一个类,它首先需要在调用基础构造函数之前调用派生类构造函数。我知道通过以下代码首先调用基础构造函数:
public class A {
protected A () {
//do something
}
}
public class B : A {
public B () : base() {
//do something else
}
}
他们是一种扭转这种秩序的方法,还是一种解决方法?一种可能的解决方案,我们在基类中创建一个额外的受保护方法,如doConstructor(),并且在第一个任务之后在readonly字段中无法在派生构造函数中调用它,因为编译器不会接受它。
答案 0 :(得分:3)
没有直接的方法来实现这一目标。在过去,我也遇到过这种情况,并使用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();
}
}
只要你遵循这里的预先,后期和正常初始化的指导原则,它就可以是合理安全的并且在良好的实践中。