Я пытался полностью разобраться в типах Reference и Value. Как раз тогда, когда я думал, что у меня есть это, я столкнулся с этим сценарием ...
Я создал класс, который будет содержать один объект.
class Container
{
public object A {get; set;}
}
Когда я создаю экземпляр этого класса-контейнера (a), я создаю экземпляр ссылочного типа. Я присваиваю целое число объекту в классе. Насколько мне известно, это будет упаковано как объект другого ссылочного типа.
int start = 1;
Container a = new Container{ A=start };
Я создаю другой экземпляр класса Container (b), но присваиваю ему значение первого контейнера, значение b теперь является ссылкой на a.
Container b = a;
Как и ожидалось, когда я распечатываю значения a.A и b.A, они совпадают.
Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
//a.A=1,b.A=1
И, как и ожидалось, когда я изменяю значение a.A, значение b.A также изменяется из-за того, что они ссылаются на один и тот же объект.
a.A = 2;
Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
// a.A=2,b.A=2
Теперь я решил попробовать это, используя отдельные локальные объекты. Я снова помещаю целое число в первый объект и назначаю значение первого объекта второму. Я считаю, что в данный момент объект должен быть ссылочным типом, поэтому c и d должны ссылаться на один и тот же объект. Ничего не меняя, они возвращают одно и то же значение.
int start = 1;
object c = start;
object d = c;
Console.WriteLine("c={0},d={1}",c,d);
// c=1,d=1
Как и раньше, при изменении значения исходного объекта я ожидаю, что значение обоих объектов будет одинаковым.
c = 2;
Console.WriteLine("c={0},d={1}",c,d);
// c=2,d=1
Когда я печатаю результат для этих двух объектов, значение d не меняется, как раньше.
Может кто-нибудь объяснить, почему назначение в этом сценарии отличается от предыдущего?
Спасибо