代码
class Father {
static int f = SetF();
int f1 = SetF1();
static int SetF() {
Console.WriteLine("父类静态变量");
return 1;
}
static int SetF1() {
Console.WriteLine("父类非静态变量");
return 1;
}
public Father() {
Console.WriteLine("父类构造器");
}
static Father() {
Console.WriteLine("父类静态构造器");
}
}
class Son : Father {
static int s = SetF();
int s1 = SetF1();
static int SetF() {
Console.WriteLine("子类静态变量");
return 1;
}
static int SetF1() {
Console.WriteLine("子类非静态变量");
return 1;
}
public Son() {
Console.WriteLine("子类构造器");
}
static Son() {
Console.WriteLine("子类静态构造器");
}
}
class Program {
static void Main(string[] args) {
Console.WriteLine("----First----");
Son s = new Son();
Console.WriteLine("----Second----");
s = new Son();
}
}
打印结果
----First----
子类静态变量
子类静态构造器
子类非静态变量
父类静态变量
父类静态构造器
父类非静态变量
父类构造器
子类构造器
----Second----
子类非静态变量
父类非静态变量
父类构造器
子类构造器
总结
- 单个类初始化顺序为:静态变量 => 静态构造器 => 非静态变量 => 非静态构造器
- 如果是实例化子类那么调用顺序如上结果
- 静态变量 和 静态构造器只会初始化一次