在同时有静态构造函数,静态成员,构造函数,实例成员的情况下,执行顺序为:
1.执行子类静态成员初始化语句;
2.执行子类静态构造函数;
3.执行子类实例成员初始化语句;
4.执行基类静态成员初始化语句;
5.执行基类静态构造函数;
6.执行基类实例成员初始化语句;
7.执行基类实例构造函数;
8.执行子类实例构造函数。
注:成员赋值初始先从子类再到基类,构造函数初始化先从基类再到子类。
例子:
public class Print
{
public Print(string s)
{
Console.WriteLine(s);
}
}
public class Parent
{
public static Print obj1 = new Print("6");
public Print obj2 = new Print("10");
public static Print obj3 = new Print("7");
static Parent()
{
new Print("9");
}
public static Print obj4 = new Print("8");
public Print obj5 = new Print("11");
public Parent()
{
new Print("12");
}
}
public class Child : Parent
{
static Child()
{
new Print("3");
}
public static Print obj1 = new Print("1");
public Print obj2 = new Print("4");
public Child()
{
new Print("13");
}
public static Print obj3 = new Print("2");
public Print obj4 = new Print("5");
}
Child child = new Child();
Child child = new Child();
输出顺序为:1 2 3 4 5 6 7 8 9 10 11 12 13 4 5 10 11 12 13
Child child = new Child();
Parent parent = new Parent();
输出顺序为:1 2 3 4 5 6 7 8 9 10 11 12 13 10 11 12
Parent parent = new Parent();
Child child = new Child();
输出顺序为: 6 7 8 9 10 11 12 12 3 4 5 10 11 12 13