using System; namespace ConsoleApp { class Program { static void Main() { A a = new B(); Console.ReadKey(); } } class A { int z = 1;////////////////////////////////////////////7 int k; static int i = 1;/////////////////////////////////5 static int j; public A()////////////////////////////////////////////////8 { k = -1;///////////////////////////////////////////9 PrintFields();///////////////////////////////////////////10 } public virtual void PrintFields() { } static A() { j = 2;/////////////////////////////////////////////6 } } class B : A { int x = 1; ///////////////////////////////////////3 int y; static int m = 1;/////////////////////////////////1 static int n; public B()//////////////////////////////////////////4 { y = -1;///////////////////////////////////////12 PrintFields();///////////////////////////////13 } public override void PrintFields() { Console.WriteLine("x={0},y={1}", x, y);////////////////////////////////11,14 } static B() { n = 2;//////////////////////////////////////////2 } } }
总结为一句话就是先子类静态构造函数,再基类静态构造函数,再基类实例构造函数,再子类实例构造函数
C#对象初始化的先后顺序
时间: 2024-11-08 04:51:03