Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Создание объектов C# Полное руководство Герберт Шилдт

Создание объектов C# Полное руководство Герберт Шилдт

В предыдущих примерах программ для объявления объекта типа 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 содержит не сам объект, а лишь ссылку на него.