1

Simple整数を含むクラスがありますnumber。このコードの使用:

Simple b = new Simple();
List<Simple> list = new List<Simple>();
list.Add(b);
b.number = 6;
b = null;
Debug.WriteLine("The value of b is " + b);
Debug.WriteLine("And the value of the clown in the list is " + list[0].number);

デバッグはとを返しThe value of b isますAnd the value of the clown in the list is 6

bにを追加するとlist、への参照bが保存されると想定できます。次に、をnullblistすることにより、オブジェクトへの参照が含まれているためb、の値を出力できますnumber

ただし、のメンバーを変更bして、リストに格納されている参照に反映させることができる場合、なぜ?b = nullの値に反映されないのlist[0]ですか?私はこれが価値と参照と関係があると推測することができるだけです。

誰かを助けますか?

4

1 に答える 1

4

blist[0]は両方とも、メモリ内の同じ場所を参照する変数です。を設定すると、の参照がにb = null設定されます。はまだメモリ内の元の場所を指しており、変更されていません。bnulllist[0]

のプロパティを変更するbと(たとえばb.A)、効果的に言っている

オブジェクトbが指しているものをすべて取得し、プロパティAを更新します。

A経由list[0]でアクセスすると、

list [0]が指しているものを取得して、Aプロパティを取得してください。

編集:別の例として、との場合b = someObjectlist[0] = someObject設定b = someOtherObjectは変更されませんlist[0]...list[0]はまだを指していsomeObjectます。

したがって、質問に答えるには、両方が参照しているオブジェクトを設定b = nulllist[0] = nullて「null」にする必要があります。それでも、あなたが望むように見えることはしません。実行するのは、メモリ内のオブジェクトを孤立させ、オブジェクトに到達Garbage Collectorするたびにオブジェクトをクリーンアップできるようにすることだけです。

于 2012-12-28T23:39:50.927 に答える