7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
我遇到过一道面试题就是关于静态构造函数的,代码是这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class A { public static readonly int x; static A() { x = B.y + 1; } } class B { public static int y = A.x + 1; static void Main( string [] args) { Console.WriteLine( "x:{0},y:{1}。" , A.x, y); Console.ReadLine(); } } 首先应该纠正,简单值类型的全局变量默认初始值都是0.因为入口函数在类B,所以程序首先加载B,由于y是B的静态成员,类一加载时便会计算y的值, 但是发现y的值是通过赋值的方式获得的,等号右边用到了A的x,此时会立即计算x的值,x是通过类A的静态构造函数初始化的,期间又引用了B的Y, 此时y的值还是0(因为y的赋值语句还没执行完,故其值还是默认的),得到x=0+1=1,继续为y赋值得到y=x+1=2.