静态类初始化原理(里面有代码可以复制粘贴),顶者有分
using   System; 
 using   System.Collections.Generic; 
 using   System.Text;   
 namespace   ConsoleApplication1 
 {   
             static   class   A 
             { 
                         public   static   int   a   =   B.b   +   1; 
                         static   A() 
                         { 
                                     Console.WriteLine( "Static   A() "); 
                         } 
             } 
             static   class   B 
             { 
                         public   static   int   b   =   A.a   +   1; 
                         static   B() 
                         { 
                                     Console.WriteLine( "Static   B() "); 
                         }     
             } 
             class   C 
             {    
                                     static   void   Main(string[]   args) 
                         { 
                                     Console.WriteLine( "A.a={0},B.b={1} ",A.a,B.b); 
                                     Console.ReadLine(); 
                         } 
             } 
 }   
 将main方法分别放在A,B,C类中的时候,输出结果不同,为什么? 
------解决方案--------------------同时,程序的执行都是以堆栈方式 
 比如,你把main函数方到B class的时候,程序的执行顺序是这样: 
 因为是在B里,所以,先初始化B的静态变量,所以就先去初始化b,这时就会访问A.a, 
 这样就会初始化A Class,这时的B.b的状态是空间已经被分配了,但是还没有初始化,因此这个值有可能呢和编译器,以及编译方式不同而不同,一般来说,debug方式,这时的B.b应该是0 
 这样A.a就是1,然后执行A的静态构造函数 
 A这边完了,才是B
------解决方案--------------------解释一下nicochang() 的意思, 
 当Main()在C中时,Console.WriteLine( "A.a={0},B.b={1} ",A.a,B.b); 首先访问A,A被创建后初始化内部成员a, 
 因为public static int a = B.b + 1; 
 A在初始化的时候访问了B,所以这里会导致B被创建,同样B被创建后初始化内部成员b,这时A已经被成功创建,且A.a有默认值0,所以B.b被初始化为1,之后调用静态构造函数。 
 程序指针返回,继续初始化A.a,则A.a=2,然后调用static A();   
 当Main()在A中时,会导致程序一进来就访问了A,根据上面的顺序,会先完成初始化B,后完成初始化A。Main()在B中也是一个意思。   
 可能说得有点乱,在成员定义处和静态构造函数处加断点调一下就明白了。