次のような配列をインスタンス化します。
int array[] = new int[4];
これらの4つのメンバーのデフォルト値は何ですか?null、0、または存在しませんか?
次のような配列をインスタンス化します。
int array[] = new int[4];
これらの4つのメンバーのデフォルト値は何ですか?null、0、または存在しませんか?
int
0です。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#仕様の範囲外です。)
配列要素やインスタンスフィールドなど、タイプが自動的に初期化される変数のデフォルト値は、T
の値と同じですdefault(T)
。参照型とポインタ型の場合、nullです。数値タイプの場合、それはそのタイプのゼロです。ブール値の場合、それは誤りです。構造体タイプの場合、すべてのフィールドがデフォルト値に初期化されているのは構造体値です。
アレイから(C#プログラミングガイド):
数値配列要素のデフォルト値はゼロに設定され、参照要素はnullに設定されます。
整数にすることはできませんNULL
。それらの値は「0」になります。fromコードに割り当てようとしても、割り当てるNULL
ことint
はできません。