2011-01-17 14 views
1

以下を明確にしたいと思います。参照型変数には、その型の値を格納できるメモリブロックへの参照が含まれていることがわかります。しかし、その値が "new"キーワードを使用して割り当てられる前に、参照はメモリ内の空の場所を指しているだけですか?"new"キーワードの前の参照型の値

答えて

6

割り当てられていないフィールドはnullです。
nullの参照はどこにも指していないと考えることができます。

+0

これはオブジェクトのフィールドにのみ適用されます。初期化されていないローカル変数は、特定の値を持つことが保証されていません。 –

+1

@Anon:そうではありません。 CLRはローカルにデフォルト値を割り当てます。しかし、C#コンパイラはそれらを見ることはできません。 http://stackoverflow.com/questions/3592274/initializing-null-variables-in-net/3592448#3592448 – SLaks

+0

@SLaks:C#仕様では、デフォルトの初期化は必要ありません。コンパイラが '.locals init'を発行するという事実は実装の詳細です。 –

0

参照型ではnull、値型ではデフォルト(型)です。 しかし、コンパイラは、割り当てられていない フィールドと 変数を使用できないようにします。

+0

割り当てられていないフィールドの使用には何も問題ありません。 – SLaks

+0

はい、あなたは正しいです。 – tenor

+0

これを見るもう一つの方法は、*フィールドは常に*割り当てられているため、 "unassigned"フィールドを見ることはできません。フィールドは、フィールドのストレージが取得されたときにメモリマネージャによってデフォルト値に割り当てられます。 –