今天去面试的时候被一道题问得一点脾气都没有,今天特地来研究下。
子类成员变量,子类静态成员变量,子类构造函数,父类成员变量,父类静态成员变量,父类构造函数的执行顺序。
现在贴上从另外一个.net程序员写的实例,稍微改下。
public class ShowInfo { public ShowInfo(string info) { Console.WriteLine(info); } } class father { public static ShowInfo StaticFatherMember = new ShowInfo("父类静态成员变量执行"); //父类静态成员变量 public ShowInfo InstanceFatherMember = new ShowInfo("父类实例成员变量执行"); //父类实例成员变量 static father() //父类构造函数 { ShowInfo StaticFatherMethod = new ShowInfo("父类静态构造函数执行"); //父类静态构造函数 } public father() { ShowInfo bcsI = new ShowInfo("父类实例构造函数执行"); } } class son : father { public static ShowInfo StaticSonMember = new ShowInfo("子类静态成员变量执行"); public ShowInfo InstanceStaticSonMember = new ShowInfo("子类实例成员变量执行"); static son() { ShowInfo StaticSonMethod = new ShowInfo("子类静态构造函数执行"); } public son() { ShowInfo InstanceSonMethod = new ShowInfo("子类实例构造函数执行"); } } class Program { static void Main(string[] args) { //各个对象的初始化顺序如下: //①子类静态成员变量 //②子类静态构造函数 //③子类实例成员变量 //④父类静态成员变量 //⑤父类静态构造函数 //⑥父类实例成员变量 //⑦父类构造函数 //⑧子类构造函数 son s = new son(); Console.ReadKey(); } }
来看看最后的输出结果:
1子类静态成员变量 2子类静态构造函数 3子类实例成员变量 4父类静态成员变量 5父类静态构造函数 6父类实例成员变量 7父类构造函数 8子类构造函数
看来除了构造函数,子类全部比父类先执行,其顺序是静态先于实例,变量先于函数。然后子父类实例函数都是最后执行。