引用直接对象实例,而不是数组的单元格c#

mar*_*rix 0 c# arrays reference object

我有对象数组(假设类名是Snap)Snap.

有没有办法保存变量直接引用单元格中的对象,而不是单元格?因为,当我这样做时:

Snap[] goo = new Snap[3];
// here we add some objects to this array

Snap foo = (Snap)goo[1];
Run Code Online (Sandbox Code Playgroud)

所以现在,如果我要改变foo,那么我也会改变goo [1].好.但是现在我将在goo上做一些排列:

first i had: 0 1 2
after permutation: 1 0 2
Run Code Online (Sandbox Code Playgroud)

foo仍然是goo [1]但不是这个对象!这个对象现在在goo [0]!那么,如何直接"捕捉"这个对象,而不是单元格!有任何想法吗?

Jon*_*eet 6

foo 对象的直接引用......但也是如此goo[1].它们引用相同的对象,因此如果你改变了对象(不管你做了什么),那么这些改变都将通过两个引用来看到.

请注意,更改值通过 foo没有实际改变foo.我喜欢从房屋(作为对象),街道地址(作为参考)和纸张(作为变量)的角度来考虑它.假设我把我的地址写在两张纸上,然后给你一个,给别人一个(弗雷德).然后你把我的房子涂成红色,然后弗雷德来参观(通过阅读写在纸上的地址).你改变了我家的颜色 - 但你根本没有改变弗雷德的那张纸.

如果你想避免这种别名,你应该考虑使你的类型不可变,并提供创建新对象的方法,这些对象就像旧对象一样,除了一些特定的变化 - String例如.

  • +1:房子/街道地址是一个非常好的例子! (2认同)