在百度知道里看到的提问和答案 c#中关于static的问题,为什么下面的代码得出Y的值为3, x的值为1 using System ; class A { public static int x; static A() { x=B.y+1; } } class B { public static int y=A.x+1; static B() { y=y+1; } static void Main() { Console.WriteLine("x={0},y={1}",A.x,B.y); //Console.ReadLine(); } } 答案 namespace StaticTest { class Program { static void Main() { Console.WriteLine("x={0},y={1}", A.x, B.y); Console.ReadLine(); } } class A { public static int x; static A() { x = B.y + 1; } } class B { public static int y = A.x + 1; static B() { y = y + 1; } } } 要知道为什么会得出这样的结果,首先要了解类的静态构造在何时执行。 1.在类实例化对象时静态构造自动执行; 2.在调用类的静态变量时静态构造自动执行; 这是我所知道的。下面说说这个程序的执行过程: Console.WriteLine("x={0},y={1}", A.x, B.y); 1)从这语句得知它首先调用的是A类的x静态变量, 这里符合上面所提的第二种情况,即(在调用类的静态变量时静态构造自动执行) 2)static A() { x = B.y + 1; } 此时将执行x = B.y + 1; 这里调用了B类的y静态变量, (这里也符合第二种情况) 3)public static int y = A.x + 1; (x=B.y+1;未执行完,因此 A.x 此时为默认值 即0,而y的值为1.) 4)static B() { y = y + 1; //y的值为2 } 5)由此就可以得知x = B.y + 1; 计算结果为3 Console.WriteLine("x={0},y={1}", A.x, B.y); x=3,y=2
posted on 2011-08-15 12:45  qqhepp  阅读(215)  评论(0编辑  收藏  举报