2011-08-14 24 views
0

このデモクラスが質問複数の参照割り当て - 基準質問

public class SomeClass 
    { 
     public string Name { get; set; } 
     public int Age { get; set; } 

    } 

を説明しますクラスは参照型であるため、複数のインスタンスを同じclass objectに割り当ててloopを使用し、これらのオブジェクトをリストに格納すると、各オブジェクトを破棄して最後に割り当てられたインスタンスと同じにするには十分ではありませんか?

ここではいくつかのサンプル実装をテストした後の混乱

List<SomeClass> lst = new List<SomeClass>(); 
SomeClass someClassObj = null; 

for (int i = 0; i < 3; i++) 
{ 
    someClassObj = new SomeClass(); 
    someClassObj.Name = "Name " + i.ToString(); 
    someClassObj.Age = i; 
    lst.Add(someClassObj); 
} 

のためだ、それはとにかく私が欲しいもの
誰がこの混乱をクリアするために役立つことを、方法Iそれは希望かかわらをwokredしません。

答えて

1

リストに意味している新しいメモリ片がヒープに作成され、それのアドレスがsomeClassObjに割り当てられている

someClassObj = new SomeClass();

あなたがやるたびに、あなたが再び追加されている唯一の単一のアドレスが実際に存在しないと再びしかし、新しいアドレスとオブジェクトを比較するとき、彼らは別のアドレスを持っているので、彼らは同じではありません、なぜそれが

だ当初

SomeClass someClassObj = null;あなたのオブジェクトは何も指していません。 new()を使用して新しいインスタンスを作成すると、オブジェクトは新しく割り当てられたメモリのアドレスを指し始める。したがって、ループ内では、すべてのインスタンスに新しいアドレスが割り当てられ、そのアドレスは同じポインタ/参照であるSomeClassに格納されます。リストにアイテムを追加すると、実際に指し示されているアイテムのアドレス/参照が実際に追加されますSomeClass

1

実際に何をしているかは、各繰り返しでsomeClassObjに新しい参照を割り当ててから、あなたのリストを参照してください。リストにsomeClassObjへの参照を追加していません。 AddメソッドはsomeClassObjへの参照になるためにrefパラメータを取る必要があります。

関連する問題