从列表中选择它后,对象仍然链接(引用)?
我想知道,我真的不确定,但帮助我在这里。从列表中选择它后,对象仍然链接(引用)?
如果您有一个List项目,并且有一个对象需要更改它的一个属性。假设myClass有一个字符串属性“status”。我在寻找一个for循环我的列表,并让我的对象,所以我做
myClass item = items[i];
,如果我想改变“身份”属性,我这样做,例如:
item.Status = "new status";
我的问题/问题是这样的:为“项目”仍挂列表项的,所以如果我执行上面的线,将在列表中也改变了,而不必设置此:
items[i] = item;
希望这很清楚。
在此先感谢。
代码item.Status = "new status";
将改变列表项
items[i]
指向一个MyClass的对象。
当你说myClass item = items[i];
时,它被item
和items[i]
引用。
所以当你改变这样item.Status = "new status";
你实际上你myClass的对象,现在有两个名字item
和items[i]
更改的属性之一。您可以使用item[i].Status = "new status";
。两者都做同样的工作。
设置items[i] = item;
没有效果,因为两者都已经引用同一个对象。
是的,你正在改变列表中的项目。您不需要再次将其分配给列表。
这两个列表和item
变量都有引用到实际的对象。您对该对象所做的任何更改都可以通过任一参考进行查看。
换句话说......假设你翻阅电话簿,并选择一个特定的地址。您将地址复制到一张纸上,然后在那里开车。然后你把房子涂成红色。现在,任何在电话簿中查找相同地址的人都会看到红房子,即使他们没有看到您的纸张。
看看我的article about value types and reference types了解更多信息。
(这是所有假设myClass
真的是一类,顺便说一句。)
是的,如果myClass
是一类顾名思义(而不是一个结构),它是一个reference type。因此,当您编写myClass item = items[i];
时,它不会被复制。 item
仅仅是对items[i]
引用的同一对象的引用。
是什么让这种情况发生? – Terry 2010-05-18 11:56:35
假设myClass确实是一个类而不是结构体:-) – 2010-05-18 11:57:16
@Jakob:即使它是一个结构体,它也是如此,只要它不是不可变的。 – 2010-05-18 12:49:29