このような配列をインスタンス化します。
int array[] = new int[4];
これらの4つのメンバーのデフォルト値は何ですか? null、0、または存在しませんか?
0です。nullは有効なint
値ではないため、nullにすることはできません。
C#5仕様のセクション7.6.10.4から:
新しい配列インスタンスのすべての要素は、デフォルト値(§5.2)に初期化されます。
セクション5.2から:
変数のデフォルト値は変数のタイプによって異なり、次のように決定されます。
- 値型の変数の場合、デフォルト値は、値型のデフォルトコンストラクター(§4.1.2)によって計算された値と同じです。
- 参照型の変数の場合、デフォルト値はnullです。
通常、デフォルト値への初期化は、メモリマネージャまたはガベージコレクタが使用のために割り当てられる前にメモリをall-bits-zeroに初期化することによって行われます。このため、null参照を表すためにall-bits-zeroを使用すると便利です。
(実装の詳細として、最初の箇条書きの周りにいくつかのトリッキーがあります。C#自体では、値型のパラメーターなしコンストラクターを宣言することはできませんが、canILの値型用に独自のパラメーターなしのコンストラクターを作成します。これらのコンストラクターは配列の初期化で呼び出されるとは思いませんが、で呼び出されますC#のnew X()
式。ただし、実際にはC#仕様の範囲外です。)
配列要素やインスタンスフィールドなどのT
型の自動初期化変数のデフォルト値は、default(T)
の値と同じです。参照型およびポインター型の場合、nullです。数値型の場合、それはその型のゼロです。ブールについては、それは偽です。構造体型の場合、すべてのフィールドがデフォルト値に初期化されるのは構造体の値です。
整数をNULL
にすることはできません。値は「0」になります。コードからNULL
にint
を割り当てようとしても、それはできません。