派生类中的基类字段初始化

时间:2015-03-05 07:54:03

标签: c# inheritance

1)如果我在基类中定义一个字段,如

myType myField = new MyField();

此字段是否始终在派生类中初始化?

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

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

我的观点是仅在基类中实例化具有默认值的字段,并在派生类中提供重写初始化。

1 个答案:

答案 0 :(得分:1)

是的,字段将始终初始化。如果您没有明确地链接到任何其他构造函数,那么您将隐式链接到base()。在点击Object之前,您总是会在类型层次结构中进行链接。

  

我的观点是仅在基类中使用默认值实例化属性,并在派生类中提供重写初始化。

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

public class BaseClass
{
    private MyType myField;

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

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

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