5

C#での静的変数宣言の順序に問題があります

このコードを実行すると:

static class Program {
  private static int v1 = 15;
  private static int v2 = v1;

  static void Main(string[] args) {
   Console.WriteLine("v2 = "+v2);
  }
}

出力は次のとおりです。

v2=15

しかし、静的変数の宣言順序を次のように変更すると、次のようになります。

 static class Program {
      private static int v2 = v1;
      private static int v1 = 15;


      static void Main(string[] args) {
       Console.WriteLine("v2 = "+v2);
      }
    }

出力は次のとおりです。

v2 = 0

なぜこれが起こったのですか?

4

4 に答える 4

10

静的フィールドは、宣言と同じ順序で初期化されます。v2の値で初期化する場合v1v1はまだ初期化されていないため、その値は0です。

于 2013-03-13T14:59:22.413 に答える
4

静的変数は宣言の順序で初期化されるため、v22番目の例で割り当てる場合v1でも、デフォルト値はになります0

ただし、このようなことを行うのは悪い考えであることをご存知だと思います。

于 2013-03-13T14:59:50.683 に答える
2

静的変数がそこに値を取得する方法は、2番目の例でv1は、が初期化されていないため、に割り当てられたときにデフォルト値の0をとることを意味しますv2

于 2013-03-13T14:59:10.830 に答える
2

フィールドはstatic、宣言に従って同じ順序で初期化されました。

2番目のコードでv1は、は初期化されていません。なので、値v1であり、すべての値型のデフォルト値はです。Int320

一言で言えば、74ページのC#4.0から。

静的フィールド初期化子は、フィールドが宣言されている順序で実行されます。

あなたの場合;

private static int v2 = v1;
// v2 initialized 0 because of the default value of value types.
private static int v1 = 15;
// v1 initialized 15
于 2013-03-13T15:01:22.927 に答える