我这个小班看起来像这样:
private static int field1 = - 1;
private static int field2 = field1 + 1;
public static void Sum()
{
field1 = 10;
Debug.WriteLine(field2);
}
对Sum()的调用写入'0'。为什么呢?
答案 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);
}
}
正如乔恩所说,我的假设是错误的。