C# 派生类中的基类字段初始化
1) 如果我在基类中定义一个字段,比如C# 派生类中的基类字段初始化,c#,inheritance,C#,Inheritance,1) 如果我在基类中定义一个字段,比如 myType myField = new MyField(); 该字段是否总是在派生类中初始化 2) 如果我通过基类默认(无参数)构造函数初始化这个字段,它会在派生类中初始化吗 假设我没有从派生类型调用任何:base()构造函数 我的观点是仅在基类中用默认值实例化字段,并在派生类中提供重写初始化。是的,字段将始终初始化。如果不显式链接到任何其他构造函数,则将隐式链接到base()。在点击Object之前,您总是会直接链接类型层次结构 我的观点是仅在基类中
myType myField = new MyField();
该字段是否总是在派生类中初始化
2) 如果我通过基类默认(无参数)构造函数初始化这个字段,它会在派生类中初始化吗
假设我没有从派生类型调用任何:base()
构造函数
我的观点是仅在基类中用默认值实例化字段,并在派生类中提供重写初始化。是的,字段将始终初始化。如果不显式链接到任何其他构造函数,则将隐式链接到
base()
。在点击Object
之前,您总是会直接链接类型层次结构
我的观点是仅在基类中使用默认值实例化属性,并在派生类中提供重写初始化
然后我建议在基类中,有两个构造函数,其中一个可能受保护:
public class BaseClass
{
private MyType myField;
protected BaseClass(MyType myField)
{
this.myField = myField;
}
public BaseClass() : this(new MyType())
{
}
}
然后派生类型中的构造函数可以链接到任意一个构造函数,视情况而定。。。你不需要在不需要的时候创建
MyType
的实例。是的,我已经解决了这个问题