静态属性的总和不正确

时间:2012-06-15 09:07:25

标签: c# properties static

我这个小班看起来像这样:

private static int field1 = - 1;
private static int field2 = field1 + 1;

public static void Sum()
{
    field1 = 10;
    Debug.WriteLine(field2);
}

对Sum()的调用写入'0'。为什么呢?

4 个答案:

答案 0 :(得分:12)

那些不是属性 - 它们是领域。 field2在初始化时仅 field1相关 - 之后,它们是完全独立的字段。每次读取field1 + 1或每次写field2时都不会重新评估field1表达式。

如果您希望 field2仅依赖field1的值,则应将其设为属性:

// Note: I wouldn't actually call this Field2, of course...
private static int Field2 { get { return field1 + 1; } }

答案 1 :(得分:2)

发生这种情况是因为您没有更新prop2。你只是在开始时初始化它。

答案 2 :(得分:0)

private static int prop1 = - 1;
private static int prop2 = prop1 + 1;

public static string Sum()
{
    prop1 = 10;
    Debug.WriteLine(prop2);
}

此代码永远不会返回1, 静态属性prop2由零启动。 您没有在Sum()函数中执行任何操作。所以它只会返回零值为“0”的无效值

答案 3 :(得分:-1)

你无法控制静态变量初始化的顺序。如果你真的想要这个,你必须在静态构造函数中使用它:

static class XYZ{

    private static int field1;
    private static int field2;

    static XYZ {
        field1 = - 1;
        field2 = field1 + 1;
    }    

    public static string Sum()
    {
        prop1 = 10;
        Debug.WriteLine(field2);
    }

}

正如乔恩所说,我的假设是错误的。