大致代码如下:
 public class abc
    {
        static int a;
        int b;
        public abc()
        {
          a = a + 1;
          b = a;
        }
       public void bcd()
       {
           Console.WriteLine("{0},{1}",a,b);
           Console.Read();
       }
    }
    class Program
    {
        static void Main(string[] args)
        {
         @  abc c = new abc();
            c.bcd();
        @@  abc d = new abc();
            c.bcd();
            c.bcd();
            d.bcd();
            Console.Read();
        }
    }  结果是:
          1,1
          2,1
          2,1
          2,2
  我知道一个类的所有实例是共享静态变量的,但对于以上结果还是感到不解
  1. @语句后 a=1 b=1
  2. @@语句后 由于是重新创建了另一个实例且a是静态变量  c.bcd()得到的结果应该是a=2 b=2啊 为何是b=1啊
  3. c.bcd()与d.bcd()为什么不同啊  为什么d.bcd()输出的结果与我期望的相同呢

解决方案 »

  1.   

    @@语句后 由于是重新创建了另一个实例且a是静态变量  c.bcd()得到的结果应该是a=2 b=2啊
    ==>
    b为什么是2呢?这里的b还是c的b即是第一个实例的那个b ,没变。
    d.bcd是因为d 在实例他时,a已经=2了,d.b=a所以=2
      

  2.   

    @@  abc d = new abc();  在这里再新建一个实例时,这里的b与原来那个b不是同一个变量,这个b是
    对象d的b原来是c.b 完全不是一码事。
      

  3.   

            @  abc c = new abc();  // 首次实例化abc,此时a被创建在静态变量区,并且通过构造函数使得此时a=1(a默认是0),实例变量b=1
                c.bcd();           // 输出的时候看到1,1
            @@  abc d = new abc(); // 第二次实例化abc,a还是上次那个a,但是b是一个新值,b被分配在这个新实例的内存中,通过构造函数a被累加了,这句之后a=2,b=2
                c.bcd();           // 此时a=2,c实例的b还是1,所以输出2,1
                c.bcd();           // 这个和上一句是相同的输出2,1
                d.bcd();           // 这里a=2,但是b是d的实例,所以b=2,这里输出是2,2
      

  4.   

    正解  第一个@那实例化后为1,1 但顺序执行到@@ 静态变量保存的第a还是1 实例第二次的时候就变成a=2 所以你的第二个c.bcd()输出为2,1  其实cuike519 说的很清楚了  呵呵