通过继承构造函数来反转构造函数调用的顺序

时间:2009-08-26 11:00:02

标签: c# inheritance constructor

我有一个类,它首先需要在调用基础构造函数之前调用派生类构造函数。我知道通过以下代码首先调用基础构造函数:

public class A {

    protected A () {
        //do something
    }

}

public class B : A {

    public B () : base() {
        //do something else
    }

}

他们是一种扭转这种秩序的方法,还是一种解决方法?一种可能的解决方案,我们在基类中创建一个额外的受保护方法,如doConstructor(),并且在第一个任务之后在readonly字段中无法在派生构造函数中调用它,因为编译器不会接受它。

1 个答案:

答案 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();
    }
}

只要你遵循这里的预先,后期和正常初始化的指导原则,它就可以是合理安全的并且在良好的实践中。