添加三个静态字段

时间:2014-10-03 13:12:09

标签: c# static field

在下面的代码中,如果我们使用常量字段,结果就可以了!但是当我们使用静态字段时,结果是不可预期的。

为什么以及如何?

class Program
{
    private static int x = y + 100;
    private static int y = z - 10;
    private static int z = 300;

    public static void Main(string[] args)
    {
        System.Console.WriteLine("{0}/{1}/{2}",x,y,z); // 100/-10/300  why and how?
        Console.ReadKey();
    }
}

3 个答案:

答案 0 :(得分:8)

成员变量按照它们在文件中出现的顺序进行初始化。在初始化x时,y和z都是0。

答案 1 :(得分:2)

z还没有被初始化。更改您正在初始化变量的顺序。

class Program
{
    private static int z = 300;
    private static int y = z - 10;    
    private static int x = y + 100;       

    public static void Main(string[] args)
    {
        System.Console.WriteLine("{0}/{1}/{2}",x,y,z);
        Console.ReadKey();
    }
}

答案

390/290/300

答案 2 :(得分:2)

在编译时完全评估常量表达式(参见C#规范的第7.19节)。

由于允许常量表达式引用类的const成员,因此const成员的值在编译时计算。这就是为什么你得到正确的"使用const字段的结果。

将此与static字段进行比较,这些字段在运行时按照它们声明的顺序进行评估。