取消对对象的所有引用

时间:2012-12-28 23:35:08

标签: c#

我有一个班级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 isAnd the value of the clown in the list is 6

我可以假设将b添加到list,然后存储对b的引用。然后,通过归零blist仍然包含对b对象的引用,因此可以打印出number的值。

但是,如果我可以更改b的成员并将其反映在列表中存储的引用中,那么为什么b = null不反映list[0]的值?我只能假设这与价值和参考有关。

帮助任何人?

1 个答案:

答案 0 :(得分:4)

blist[0]都是引用内存中相同位置的变量。设置b = null后,您要设置bnull的引用。 list[0]仍然指向内存中的原始位置并且未更改。

当您更改b的属性时(例如b.A),您实际上是在说

  

获取b指向的任何对象并更新属性A.

当您通过A访问list[0]时,您说的是

  

获取[0]指向的任何列表并获取A属性。

编辑:另一个例子,如果b = someObjectlist[0] = someObject,设置b = someOtherObject不会更改list[0] ... list[0]仍然指向{{ 1}}。

因此,要回答您的问题,您必须将someObjectb = null设置为“null”他们所引用的对象。但即便如此,也不会像你想要的那样做。所做的就是孤立内存中的对象,并允许list[0] = null在它到达时清理它。