Элемент массива хранит ссылку на объект, на который изначально ссылается foo. Элемент массива не привязан к foo напрямую. При изменении объекта, на который ссылается foo, элемент массива не изменяется.
Foo foo = new Foo();
foo.Name = "Andy";
Foo anotherFoo = foo;
foo.Name = "Bart";
Console.WriteLine(anotherFoo.Name); // writes Bart
foo = new Foo();
foo.Name = "Claire";
Console.WriteLine(anotherFoo.Name); // writes Bart
Пока вы изменяете свойства объекта, на который ссылается foo, другие переменные, ссылающиеся на этот же объект, будут "видеть" эти обновления, потому что они смотрят на тот же объект.Однако, когда я говорю foo = new Foo()
(или вы говорите foo = bar
), вы изменяете foo на ссылку на другой объект.
Ваш элемент массива не знает или не заботится о foo,он знает только об объекте, на который ссылался foo во время присваивания.