В операции присваивания переменные ссылочного типа действуют иначе, чем переменные типа значения, например типаint.Когда одна переменная типа значения присваивается другой, ситуация оказывается довольно простой. Переменная, находящаяся в левой части оператора присваивания, получает копию значения переменной, находящейся в правой части этого оператора. Когда же одна переменная ссылки на объект присваивается другой, то ситуация несколько усложняется, поскольку такое присваивание приводит к тому, что переменная, находящаяся в левой части оператора присваивания, ссылается на тот же самый объект, на который ссылается переменная, находящаяся в правой части этого оператора. Сам же объект не копируется. В силу этого отличия присваивание переменных ссылочного типа может привести к несколько неожиданным результатам. В качестве примера рассмотрим следующий фрагмент кода.

Building housel = new Building();

Building house2 = housel;

На первый взгляд, переменныеhouselиhouse2ссылаются на совершенно разные объекты, но на самом деле это не так. Переменныеhouselиhouse2, напротив, ссылаются на один и тот же объект. Когда переменнаяhouselприсваивается переменойhouse2, то в конечном итоге переменнаяhouse2просто ссылается на тот же самый объект, что и переменнаяhousel.Следовательно, этим объектом можно оперировать с помощью переменнойhouselилиhouse2. Например, после очередного присваивания

housel.Area = 2600;оба методаWriteLine()

Console.WriteLine(housel.Area);

Console.WriteLine(house2.Area);

выводят одно и то же значение: 2600.

Несмотря на то что обе переменные,houselиhouse2, ссылаются на один и тот же объект, они никак иначе не связаны друг с другом. Например, в результате следующей последовательности операций присваивания просто изменяется объект, на который ссылается переменнаяhouse2.

Building housel = new Building();

Building house2 = housel;

Building house3 = new Building();

house2 = house3; // теперь обе переменные, house2 и house3,

// ссылаются на один и тот же объект.

После выполнения этой последовательности операций присваивания переменнаяhouse2ссылается на тот же самый объект, что и переменнаяhouse3.А ссылка на объект в переменнойhouselне меняется.

Методы

Перейти на страницу:

Похожие книги