私はこの小さなクラスを次のようにしています:
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);
}
}
ジョンが言ったように、私の仮定は間違っていました。