c++没有静态构造方法和内联成员初始化而C#有这两种特性,其执行的先后顺序是不一样的,在平常编码中鲜有遇到问题的时候,不过居然有区别,也是基础知识还是应该知道的。
C#执行初始化顺序:
- 子类静态内联(inline)方式初始化字段。
- 基类静态内联(inline)方式初始化字段。
- 子类静态构造方法。
- 基类静态构造方法
- 基类非静态内联成员初始化。
- 子类非静态内联成员初始化。
public class BaseA { public static MyTest a1 = new MyTest("a1"); public MyTest a2 = new MyTest("a2"); static BaseA() { MyTest a3 = new MyTest("a3"); } public BaseA() { MyTest a4 = new MyTest("a4"); } public virtual void MyFun() { MyTest a5 = new MyTest("a5"); } } public class BaseB : BaseA { public static MyTest b1 = new MyTest("b1"); public MyTest b2 = new MyTest("b2"); static BaseB() { MyTest b3 = new MyTest("b3"); } public BaseB() { MyTest b4 = new MyTest("b4"); } public new void MyFun() { MyTest b5 = new MyTest("b5"); } } static class Program { static void Main() { BaseB baseb = new BaseB(); baseb.MyFun(); } } public class MyTest { public MyTest(string info) { Console.WriteLine(info); } }答案:
b1
b3
b2
a1
a3
a2
a4
b4
b5
b3
b2
a1
a3
a2
a4
b4
b5