クラス型の格納場所 (変数、フィールド、配列スロットなど) が最初に作成されたとき、それは保持されますnull
。構造体型の格納場所が最初に作成されると、すべてのバイトがゼロに設定された型のインスタンスが保持されます。C++ とは異なり、.NET では、その型の格納場所がいつ作成されるか、また作成されたときに何が起こるかについて、その型が発言する手段がありません。
Foo
がクラス型で、コードが array を作成する場合bar = new Foo[100]
、配列は への参照を含まない 100 個のスロットで作成されFoo
ます (最初は ですnull
)。任意の配列スロットに a への参照を保持させたいコードFoo
は、どうにかして a への参照を取得する必要があり、への参照が存在する唯一の方法Foo
は、誰かが (そのコンストラクターを呼び出して) クラスを作成するように要求した場合です。
対照的に、Moo
が構造体型で、配列を作成するboz = new Moo[100]
場合、配列は 100 個のスロットで作成され、それぞれがインスタンスMoo
です。は のインスタンスを参照しないFoo
値 ( ) を保持できますが、配列スロットはいずれもインスタンス以外のものを保持できません。の配列を作成すると、本質的に のインスタンスが作成され、型は問題に関与しないため、構造体型がインスタンスの作成を制御できるメカニズムは実際にはありません。null
Foo
Moo
Moo
Moo