我有一个班级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
的引用。然后,通过归零b
,list
仍然包含对b
对象的引用,因此可以打印出number
的值。
但是,如果我可以更改b
的成员并将其反映在列表中存储的引用中,那么为什么b = null
不反映list[0]
的值?我只能假设这与价值和参考有关。
帮助任何人?
答案 0 :(得分:4)
b
和list[0]
都是引用内存中相同位置的变量。设置b = null
后,您要设置b
对null
的引用。 list[0]
仍然指向内存中的原始位置并且未更改。
当您更改b
的属性时(例如b.A
),您实际上是在说
获取b指向的任何对象并更新属性A.
当您通过A
访问list[0]
时,您说的是
获取[0]指向的任何列表并获取A属性。
编辑:另一个例子,如果b = someObject
和list[0] = someObject
,设置b = someOtherObject
不会更改list[0]
... list[0]
仍然指向{{ 1}}。
因此,要回答您的问题,您必须将someObject
和b = null
设置为“null”他们所引用的对象。但即便如此,也不会像你想要的那样做。所做的就是孤立内存中的对象,并允许list[0] = null
在它到达时清理它。