34

次のような配列をインスタンス化します。

int array[] = new int[4];

これらの4つのメンバーのデフォルト値は何ですか?null、0、または存在しませんか?

4

4 に答える 4

57

int0です。nullは有効な値ではないため、nullにすることはできません。

C#5仕様のセクション7.6.10.4から:

新しい配列インスタンスのすべての要素は、デフォルト値(§5.2)に初期化されます。

そしてセクション5.2から:

変数のデフォルト値は変数のタイプによって異なり、次のように決定されます。

  • 値型の変数の場合、デフォルト値は、値型のデフォルトコンストラクター(§4.1.2)によって計算された値と同じです。
  • 参照型の変数の場合、デフォルト値はnullです。

デフォルト値への初期化は、通常、メモリマネージャーまたはガベージコレクターに、使用のために割り当てられる前にメモリをall-bits-zeroに初期化させることによって行われます。このため、null参照を表すためにall-bits-zeroを使用すると便利です。

(実装の詳細として、最初の箇条書きには注意が必要です。C#自体では値型のパラメーターなしコンストラクターを宣言できませんが、ILの値型用に独自のパラメーターなしコンストラクターを作成できます。私は信じていません。これらのコンストラクターは配列の初期化で呼び出されますが C#の式で呼び出されnew X()ます。ただし、実際にはC#仕様の範囲外です。)

于 2013-03-08T17:42:47.057 に答える
18

配列要素やインスタンスフィールドなど、タイプが自動的に初期化される変数のデフォルト値は、Tの値と同じですdefault(T)。参照型とポインタ型の場合、nullです。数値タイプの場合、それはそのタイプのゼロです。ブール値の場合、それは誤りです。構造体タイプの場合、すべてのフィールドがデフォルト値に初期化されているのは構造体値です。

于 2013-03-08T17:45:18.557 に答える
5

アレイから(C#プログラミングガイド)

数値配列要素のデフォルト値はゼロに設定され、参照要素はnullに設定されます。

于 2013-03-08T17:44:16.387 に答える
0

整数にすることはできませんNULL。それらの値は「0」になります。fromコードに割り当てようとしても、割り当てるNULLことintはできません。

于 2013-03-08T17:44:55.167 に答える