class BaseC : BaseB
{
private Print p = new Print("实例变量C");
private static Print p1 = new Print("静态变量C");
static BaseC()
{
Console.WriteLine("静态构造方法C");
}
public BaseC()
{
Console.WriteLine("构造方法C");
}
public new void Invoke()
{
Console.WriteLine("Invoke---BaseC");
}
}
class Program
{
static void Main(string[] args)
{
BaseC bc = new BaseC();
bc.Invoke();
}
}
}
测试信息---静态变量C
静态构造方法C
测试信息---实例变量C
测试信息---静态变量B
静态构造方法B
测试信息---实例变量B
测试信息---静态变量A
静态构造方法A
测试信息---实例变量A
构造方法A
构造方法B
构造方法C
Invoke---BaseC
1、先静态的东东在前面,静态变量>静态构造方法
2、从子类到父类(非静态构造方法除外,确实从父类到子类,与Java一样);先子类的静态——>实例,在父类静态——>实例…………父类构造方法——>子类构造方法
执行顺序:
1. 初始化ChildClass的静态字段(按声明顺序)
2. 初始化ChildClass的静态构造函数
3. 初始化ChildClass的实例字段
4. 调用ChildClass的构造函数,并在此中断, 调用ParentClass的构造函数, 导致ParentClass开始初始化
5. 初始化ParentClass的静态字段
6. 初始化ParentClass的静态构造函数
7. 初始化ParentClass的实例字段
8. 调用ParentClass的实例构造函数
9.ParentClass初始化完毕, 调用ChildClass的构造函数,完成创建