c# 衍生类和基类的构造顺序
public class MyDeriveClass
:MyBaseClass
{
public MyDeriveClass()
:base()
{
}
int derive_int = 1;
}
public class MyBaseClass
{
public MyBaseClass()
{
}
int base_int = 1;
}
var cls = new MyDeriveClass();
调用顺序如下:
- derive_int = 1;
- base_int = 1;
- MyBaseClass();
-
MyDeriveClass();
考虑MyBaseClass()中有一个属性A为abstract
在MyBaseClass()中可以直接操作这个属性A,
只需要(也应该如此设计)DeriveClass做好override你需要注意的问题是:
在Field的声明处初始化 和 在构造函数中初始化 的顺序是不一样的。
在Field的声明处初始化 总是比 构造函数要早执行,且早于基类的Field的声明处初始化和基类的构造函数。