怎么我输出来的是x=2,y=1呢
我自己的理解是:
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
运行顺序如下:
构造A,x=0  -> A的构造函数中调用了B -> 构造B,y=1  -> 返回至A的构造函数中的X=B.y+1=2
因此,输出的是X=2,Y=1

解决方案 »

  1.   


    /**//************************************************** 
    * 静 态 构 造 函 数 练 习 
    * (1)①②③……为执行顺序 
    * (2)输出结果: static A() 
    * static B() 
    * X = 1, Y = 2 
    ***************************************************/ 
    using System; 
    class A 

    public static int X; 
     
    static A() //④ 执行完后返回到③ 
    {
        Console.WriteLine("static A() 1"); 
    X = B.Y + 1; 
    Console.WriteLine("static A() 2"); 


     
    class B 

    public static int Y = A.X + 1; //③ 调用了A的静态成员, 
    // 转到A的静态构造函数----> 
     
    static B() //② 如果带有初始值设定项的静态字段, 
    // 执行该类的静态构造函数时, 
    // 先要按照文本顺序执行那些初始值设定项。 
    // 转到初始值设定项----> 

    Console.WriteLine("static B()"); 

     
    static void Main() //① 程序入口, 
    // 如果类中包含用来开始执行的 Main 方法, 
    // 该类的静态构造函数将在调用 Main 方法之前执行。 
    // 转到B的静态构造函数----> 
    {
        Console.WriteLine("main"); 
    Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果 
    Console.ReadLine(); 

    }该了下输出结果:
    static A() 1
    static A() 2
    static B()
    main
    X = 1, Y = 2
      

  2.   

    有此可以看出,是先执行class A 的静态构造函数,在调用class B的静态构造函数,最后是main我换了class A B的顺序后执行的结果还是这样的.
      

  3.   

    今天view代码的时候发现了一个类中有两个无参的构造函数,一个internal的,一个static的。我一时没反应过来,基础也打得不太好,于是写了个例子。发现两个都被调用了,而且static总是先被调用。下面是小例子。但其他静态的方法就不能出现同名同参数列表的情况。
    class Class1
     {
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main(string[] args)
      {
       TestConstructor test = new TestConstructor();
    //   TestConstructor test;
       Console.ReadLine();
      }public class TestConstructor
     {  static TestConstructor()
      {
       Console.WriteLine("static");
      }  internal TestConstructor()
      {
       Console.WriteLine("internal");
      }  internal void test()
      {}//  static void test()
    //  {}
     }
     }一下的来自google搜索:
      静态构造函数是实现对一个类进行初始化的方法成员。它一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。如:using System.Data;
    class Employee
    {
     private static DataSet ds;
     static Employee()
     {
      ds = new DataSet(...);
     }
     ...
    }   声明了一个有静态构造函数的类Employee。注意静态构造函数只能对静态数据成员进行初始化,而不能对非静态数据成员进行初始化。但是,非静态构造函数既可以对静态数据成员赋值,也可以对非静态数据成员进行初始化。  如果类仅包含静态成员,你可以创建一个private的构造函数:private TestClass() {…},但是private意味着从类的外面不可能访问该构造函数。所以,它不能被调用,且没有对象可以被该类定义实例化。对于上文的最后一点,我又试了一下。并发现,静态的构造函数在第一次对任意静态成员赋值时被调用。
     class Class1
     {
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main(string[] args)
      {
       Console.WriteLine("Will give A value");
       TestPrivateStatic.a = 3;
       Console.WriteLine("Done");
       TestPrivateStatic.a = 4;
       Console.ReadLine();
      }public class TestPrivateStatic
     {
      public static int a;  static TestPrivateStatic()
      {
       a = 2;
       Console.WriteLine("a has been given value");
      }
     }
     }就这样了,平时总会发现一些细小的东西,没记下来真是一种损失,现在来弥补。