4

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

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

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

对 Sum() 的调用写入“0”。为什么?

4

4 回答 4

12

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

如果您只想 field2依赖 的值field1,则应将其设为属性:

// Note: I wouldn't actually call this Field2, of course...
private static int Field2 { get { return field1 + 1; } }
于 2012-06-15T09:09:43.880 回答
2

发生这种情况是因为您没有更新 prop2。您只是在开始时对其进行初始化。

于 2012-06-15T09:09:47.827 回答
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”的初始化值

于 2012-06-15T09:20:11.697 回答
-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);
    }

}

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

于 2012-06-15T09:11:03.270 回答