2011-01-19 9 views
1

私はMSDNで見つけることができませんので、ここでもう一度やり直しています:)要素を追加するとき、boxedで新しいオブジェクトへの参照がコレクションに追加されます(値型の場合)。参照はarraylistに追加されます。あれは正しいですか?ArrayList.Add - 参照のみを追加しますか?

EDIT:だから、一つ一つが正しいヒープ<

答えて

3

上の値を参照するObjectクラスの単なるインスタンスが含まれています。

しかし、実際のコードでは、ArrayListではなく、List<T>という一般名を使用する必要があります。

0

はい。それは正しいです。

リスト<>は動作が異なります。

+0

明確にする:Valueタイプでは動作しますが、Referencesでも同じです。 –

0

はい、正しいですが、とにかくArrayListを使用してジェネリックスに固執するべきではありません。

1

はい正しいです。

ArrayListのは、汎用ではありません(それはFxの1.1からである)ので、いつでもあなたはAdd(x)を呼び出す

void Add(System.Object item) { ... } 

のようなメンバーが、xSystem.Object型指定された参照に変換する必要があります。任意のオブジェクト参照のための些細なアップキャストがボクシングは値の型に必要です。

ここで過半数に参加する:もうほとんど使用しないでください。これは2005年より前に開始されたコードと、混合型を格納する非常にまれな状況のためだけです。

+0

@Henk Holterman:ありがとう。私が不明なこと:渡されたすべての値もSystem.Object参照に変換されます。つまり、Objectの新しいインスタンスが存在することを意味しますか? – Lojol

+0

@lojo:はい、ボクシングはオブジェクトをインスタンス化することを意味します。そして、refはリストに格納されます。 –

+0

@Henk Holterman:参照型の値はどうでしょうか?それで、元の参照型と同じ場所を指す新しいオブジェクトを作成しますか? – Lojol

0

はい、参照を追加するだけです。

これはシャローコピーリファレンスと呼ばれます。あなたの場合、ディープコピーを実装して新しいオブジェクトを作成し、そのオブジェクトに値をコピーする必要があります。

関連する問題