using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 { /* * C#静态构造函数既没有访问修饰符,也没有参数。 * 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 * 无法直接调用静态构造函数。 * 在程序中,用户无法控制何时执行静态构造函数。 * C#静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。 * C#静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。 */ public class A { public static int X; static A() { X = B.Y + 1; //②跳到static B()执行 Console.WriteLine("static A()..."); //⑤输出static A()... } } public class B { public static int Y = A.X + 1; //④它会跳到static A(),但是static A()在执行过程中 //A.X还是默认值0,所以Y=1 跳回②继续执行 得X=2 static B() { Console.WriteLine("static B()..."); //③输出static B()... } } public class C { public static void Main() { int a = A.X; //①跳到static A()执行 int b = B.Y; //⑥static B()已经执行过一次,所以直接输出结果 b=1 Console.WriteLine("X={0},Y={1}", a, b); } } }
运行结果: