Я играл, пытаясь полностью понять типы ссылок и значений. Как раз когда я думал, что у меня это есть, я наткнулся на этот сценарий...
Я создал класс, который будет содержать один объект.
class Container
{
public object A {get; set;}
}
Когда я создаю экземпляр этого класса Container (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 не меняется, как раньше.
Может кто-нибудь объяснить, почему задание в этом сценарии отличается от предыдущего?
Спасибо