C# 添加三个静态字段

C# 添加三个静态字段,c#,static,field,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.Write

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

原因和方式?

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();
    }
}

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

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

常量表达式在编译时被完全计算(参见C#规范第7.19节)

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


将其与运行时按声明顺序计算的
静态
字段进行比较。

和常量成员?@programmer1,常量在编译的代码中被替换为它们的值,因此顺序无关紧要您的输出是错误的。它返回的z为正300。谢谢Juharr,它被更正了。好吧,这只是一个示例代码来说明问题,它不是真正的代码,无论如何谢谢你们。