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

の値だけに依存したい 場合は、それをプロパティにする必要があります。field2field1

// 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 に答える