我有这个小班看起来像这样:
private static int field1 = - 1;
private static int field2 = field1 + 1;
public static void Sum()
{
field1 = 10;
Debug.WriteLine(field2);
}
对 Sum() 的调用写入“0”。为什么?
我有这个小班看起来像这样:
private static int field1 = - 1;
private static int field2 = field1 + 1;
public static void Sum()
{
field1 = 10;
Debug.WriteLine(field2);
}
对 Sum() 的调用写入“0”。为什么?
这些不是属性 - 它们是字段。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; } }
发生这种情况是因为您没有更新 prop2。您只是在开始时对其进行初始化。
private static int prop1 = - 1;
private static int prop2 = prop1 + 1;
public static string Sum()
{
prop1 = 10;
Debug.WriteLine(prop2);
}
此代码从不返回 1,静态属性 prop2 由零初始化。您没有在 Sum() 函数中执行任何操作。所以它只会返回零“0”的初始化值
您无法控制静态变量初始化的顺序。如果你真的想要这个,你必须在一个静态构造函数中:
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);
}
}
正如乔恩所说,我的假设是错误的。