почему переменная типа object не копирует ссылку на объект

такой вопрос: object - ссылочный тип, тогда почему при копировании из одной переменной в другую ссылка не копируется, так как это происходит с объектами других классов? Как я понимаю тут происходит boxing и переменная a должна содержать ссылку на значение в куче.

object a = 22;
object b = a;
b = 13;
Console.WriteLine(a); //22

A item1 = new A();
A item2 = new A();

item1.X = 11;
item2 = item1;
item2.X = 22;
Console.WriteLine(item1.X); // 22

class A
{
    public int X { get; set; } 
}

Ответы (1 шт):

Автор решения: aepot

Когда вы обращаетесь к членам класса в объекте, вы не выполняете ничего со ссылкой на сам объект. Если у вас 2 ссылки указывают на один объект, то можете внутри него что угодно делать, это никак не повлияет на на сами ссылки, они так и будут на него указывать. Чтобы изменить ссылку, надо в нее что-то присвоить, а вы ничего в ссылку не присваиваете.

// присваивание ссылки на объект
item = ...;

// работа с тем, что внутри объекта по ссылке
item.X = ...;

во втором случае ссылка на объект используется только как путь к члену класса, и операция присваивания относится именно к члену объекта, а не к ссылке на него.

→ Ссылка