using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
public class A
{
public static int X;
static A()
{
X = B.Y+1;
}
}
public class B
{
public static int Y;
static B()
{
Y = A.X+1;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("X = {0},Y = {1}",A.X,B.Y);
Console.Read();
}
}
}
Main方法是程序的入口,Console.WriteLine( "X={0},Y={1}", A.X, B.Y );中先访问的是A.X,因为X是静态的成员所以在访问X之前A的静态构造函数必定已经执行完成,A的静态构造函数中又访问了B.X,同理在A的静态构造函数中获得B.Y的值之前B的静态构造函数必定已经执行完成,由于在完成A的静态构造函数中X=B.Y + 1的中途中执行流程跳到了B的静态构造函数,所以此时A.X还是默认值0,接着在B的静态构造函数被执行完成后得以在A的静态函数中成功获得B.Y,此时B.Y=A.X + 1=0+1=1,接着A.X=1+1=2
所以输出的是X=2,Y=1
所以输出的是X=2,Y=1