2500 кв. футов общей площади, из них 625 приходится на одного человека
Учреждение имеет:
3 этажа 25 работников
4200 кв. фу^ов общей площади, из них 168 приходится на одного человека
Как видите, данные из объектаhouseполностью отделены от данных, содержащихся в объектеoffice.Эта ситуация наглядно показана на рис. 6.1.
Рис. 6.1. Переменные экземпляра одного объекта полностью отделены от переменных экземпляра другого объекта
Создание объектов
В предыдущих примерах программ для объявления объекта типаBuildingиспользовалась следующая строка кода.
Building house = new Building();
Эта строка объявления выполняет три функции. Во-первых, объявляется переменная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содержит не сам объект, а лишь ссылку на него.
Переменные ссылочного типа и присваивание