【问题标题】:Adding three static fields添加三个静态字段
【发布时间】:2014-10-03 13:12:09
【问题描述】:

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

为什么以及如何?

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

【问题讨论】:

  • 您的输出错误。它为 z 返回一个正值 300。
  • 感谢 Juharr,已更正。

标签: c# static field


【解决方案1】:

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

【讨论】:

【解决方案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

【讨论】:

  • 好的,这只是一个显示问题的示例代码,它不是真正的代码,谢谢。
【解决方案3】:

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

由于允许常量表达式引用类的const 成员,const 成员的值是在编译时计算的。这就是您使用 const 字段获得“正确”结果的原因。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多