2500 кв. футов общей площади, из них 625 приходится на одного человека

Учреждение имеет:

3 этажа 25 работников

4200 кв. фу^ов общей площади, из них 168 приходится на одного человека

Как видите, данные из объектаhouseполностью отделены от данных, содержащихся в объектеoffice.Эта ситуация наглядно показана на рис. 6.1.

Рис. 6.1. Переменные экземпляра одного объекта полностью отделены от переменных экземпляра другого объекта

Создание объектов

В предыдущих примерах программ для объявления объекта типаBuildingиспользовалась следующая строка кода.

Building house = new Building();

Эта строка объявления выполняет три функции. Во-первых, объявляется переменнаяhouse,относящаяся к типу классаBuilding.Сама эта переменная не является объектом, а лишь переменной, которая можетссылатьсяна объект. Во-вторых, создается конкретная, физическая, копия объекта. Это делается с помощью оператораnew.И наконец, переменнойhouseприсваивается ссылка на данный объект. Таким образом, после выполнения анализируемой строки объявленная переменнаяhouseссылается на объект типаBuilding.

Операторnewдинамически (т.е. во время выполнения) распределяет память для объекта и возвращает ссылку на него, которая затем сохраняется в переменной. Следовательно, в C# для объектов всех классов должна быть динамически распределена память.

Как и следовало ожидать, объявление переменнойhouseможно отделить от создания объекта, на который она ссылается, следующим образом.

Building house; // объявить ссылку на объект

house = new Building(); // распределить память для объекта типа Building

В первой строке объявляется переменнаяhouseв виде ссылки на объект типаBuilding.Следовательно,house— это переменная, которая может ссылаться на объект, хотя сама она не является объектом. А во второй строке создается новый объект типаBuilding,и ссылка на него присваивается переменнойhouse.В итоге переменнаяhouseоказывается связанной с данным объектом.

То обстоятельство, что объекты классов доступны по ссылке, объясняет, почему классы называютсяссылочными типами.Главное отличие типов значений от ссылочных типов заключается в том, что именно содержит переменная каждого из этих типов. Так, переменная типа значения содержит конкретное значение. Например, во фрагменте кода

int х; х = 10;

переменная х содержит значение 10, поскольку она относится к типу int, который является типом значения. Но в строке

Building house = new Building();

переменнаяhouseсодержит не сам объект, а лишь ссылку на него.

Переменные ссылочного типа и присваивание

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

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