using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace _110628Ckaoshi
{    class Program
    {
        static int i = getNum();
        int j = getNum();
        static int num = 1;
        static int getNum()
        { return num; }
        [STAThread]        static void Main(string [] args)
              {
                  Console.WriteLine(string.Format("i={0}",i));
                  Console.WriteLine(string.Format("j={0}",new Program().j));
                  Console.Read();
               }
    }
}
有这样的代码;
结果是:i=0
        j=1;
我想请教一下,为什么i会得”0“呢?

解决方案 »

  1.   

    i在调用getnum方法时num没赋值为null 而C#中int会自动把null当做0来处理你看看 应该是的
      

  2.   

            static int i = getNum(); //先执行这个,这是num还没有值,是0
            int j = getNum();//这个不是静态变量,不初始化
            static int num = 1;//这是才给num赋值为1
            static int getNum()
      

  3.   

    静态变量是先初始化的
    所以执行的步骤应该是:先定义i,这时候到getNum()方法,返回num,此时num还没有被赋值,所以是i=0.
    后面的j=1也就不难解释了。楼主可以看看这个例子  输出什么?using System;
    class A
    {
       public static int X;
       static A() {
          X = B.Y + 1;
       }
    }
    class B
    {
       public static int Y = A.X + 1;
       static B() {}
       static void Main() {
          Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);
       }
    }MSDN的解释:http://msdn.microsoft.com/zh-cn/library/aa645612(VS.71).aspx
      

  4.   

    i是靜態變量,開定義時getNum()還沒有值,要是放在getNum()函數後I=1