C#:一个简单的问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 06:27:00
class Program
{
public static int i;
static Program()
{
i=Program2.j +1;
}
}
class Program2
{
public static int j;
static Program2()
{
j=Program.i + 1;
}
class A
{
static void Main()
{
Console.Write("{0}\n{1}", Program2.j, Program.i);
}
}
}
}
为什么会输出2和1,该例的静态构造函数是怎样执行的?

class Program
{
public static int i;
static Program()
{
i=Program2.j +1; //(2)
} //(3)
}
class Program2
{
public static int j;
static Program2()
{
j=Program.i + 1; //(1)
} //(4)

分别在(1),(2),(3),(4)处设置断点,按F11,你就会发现:
当Console.Write("{0}\n{1}", Program2.j, Program.i); 执行时,先读取Program2.j的值,这时个会停到(1)处,继续按F11,它的执行次序是:(2),(3),(4)

/////
分析:因为静态构造只会执行一次,所以按(1),(2),(3),(4)的顺序执行,当在(2)处调用Program2.j的时候,Program2的静态构造已经处在执行中,所以不会再次执行,这时候,Program2.j取的是CLR默认的值0;所以在(3)处时i =1;最后执行到(4)处时j=2

当然了得2和1了! 首先给i赋值 Program2.j +1。其中Program2.j只是被程序初始化了,但并没有值。静态方法只是在程序启动的时候自动在内容申请了一个空间。具体你程序计算要看你代码。