派生 class 中的基础 class 字段初始化

Base class field initialization in derived class

1) 如果我在基础class中定义一个字段,比如

myType myField = new MyField();

这个字段是否总是在派生的 class 中初始化?

2) 如果我通过基础 class 默认(无参数)构造函数初始化此字段,它会在派生的 class 中初始化吗?

假设我不从派生类型调用任何 :base() 构造函数。

我的观点是仅在基础 class 中使用默认值实例化字段,并在派生 classes 中提供覆盖初始化。

是的,字段将始终被初始化。如果您没有显式链接到任何其他构造函数,您将隐式链接到 base()。您将始终在类型层次结构中向上链接,直到您点击 Object.

My point is to instantiate property with default value only in base class and provide overridden initialization in derived classes.

然后我建议在基础 class 中,你有两个构造函数,其中一个可能是受保护的:

public class BaseClass
{
    private MyType myField;

    protected BaseClass(MyType myField)
    {
        this.myField = myField;
    }

    public BaseClass() : this(new MyType())
    {
    }
}

然后派生类型的构造函数可以根据需要链接到任一构造函数...并且您不会在不需要时最终创建 MyType 的实例。