c# - 通过继承构造函数来颠倒构造函数调用的顺序

标签 c# inheritance constructor

我有一个类,它首先需要调用派生类构造函数,然后再调用基构造函数。我知道通过以下代码将首先调用基本构造函数:

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/

相关文章:

database - 继承模型 Laravel 5

java - 子类、抽象和继承

javascript - ES6 构造函数返回基类的实例?

java - getDeclaredConstructor 方法的参数

c# - 在另一个模型中利用模型方法和属性

c# - 自定义验证器是否在 FormView 中工作?

c# - 代码覆盖率和代码行数在 sonarqube 控制台中显示为 '-'

c# - Automapper 合并/合并映射

Java泛型方法继承

删除动态表时出现 C++ 段错误