объекта. Мы расставим все точки над i в вопросе создания объектов
после того, как поближе познакомимся с конструкторами, интер-
фейсами и наследованием. Другими словами, вопрос этот не такой
тривиальный, как может показаться на первый взгляд.
переменная, с той лишь разницей, что в качестве идентификатора типа
Объектные переменные и создание объектов 57
указывается имя класса, для которого создается объектная переменная.
Например, чтобы создать объектную переменную с именем obj для класса
MyClass, можем воспользоваться командой MyClass obj. Однако объектная
переменная — это еще не объект (хотя именно с помощью объектной пере-
менной мы будем обращаться к объекту и выполнять с ним все основные
операции). Для создания непосредственно объекта используем оператор
new. Чтобы было понятно, какого класса объект создается, после оператора
new указывается имя класса с пустыми круглыми скобками.
Например, для создания объекта класса MyClass можно воспользоваться
инструкцией new MyClass(). Использование такой инструкции имеет два
важных следствия:
во-первых, создается объект класса MyClass;
во-вторых, в качестве результата возвращается адрес этого объекта, или
ссылка на объект.
Если есть результат, то его обычно куда-то записывают. Адреса объектов
(ссылки на объект) записывают в объектные переменные (обычно класс
объектной переменной должен совпадать с классом объекта). Собственно, объектная переменная и создается для того, чтобы в нее записать ссылку на
объект. В этом смысле вполне логичными могли бы быть такие команды: MyClass obj;
obj=new MyClass();
Благодаря этим двум инструкциям в наше распоряжение поступает объект
класса MyClass, доступ к которому мы имеем через переменную obj. В даль-
нейшем, если это не будет приводить к недоразумениям, под объектом мы
будем подразумевать как раз объектную переменную.
ПРИМЕЧАНИЕ Инструкции по созданию объектной переменной и объекта можно
объединить в одну — совместить объявление объектной перемен-
ной и создание объекта. Так, альтернативой командам MyClass obj и obj=new MyClass() может быть одна-единственная команда
MyClass obj=new MyClass().
Теперь мы практически готовы к тому, чтобы применить объекты на прак-
тике. Расправим наши крылья, воспользовавшись программным кодом, представленным в листинге 2.2.
Листинг 2.2. Название листинга
using System;
class MyClass{
// Поле класса:
public string name;
58
Глава 2. Классы и объекты
Листинг 2.2 (продолжение)
// Метод класса для присваивания "имени":
public void SetName(string arg){
// Присваиваем значение полю name:
name=arg;
// Отображаем сообщение об изменении
// значения поля name:
Console.WriteLine("Присвоено значение полю name.");
}
// Метод класса для отображения "имени":
public void ShowName(){
// Отображаем сообщение со значением поля name:
Console.WriteLine("Значение поля name: "+name);
}
}
// Класс с методом Main():
class ObjDemo{
// Главный метод программы:
public static void Main(){
// Объектная переменная класса MyClass:
MyClass cat;
// Создание объекта класса MyClass:
cat=new MyClass();
// Создание объекта и переменной класса MyClass:
MyClass dog=new MyClass();
// Полю name объекта cat присваивается значение:
cat.name="Мурчик";
// Полю name объекта dog присваивается значение:
dog.SetName("Шарик");
// Отображается значение поля name объекта cat:
cat.ShowName();
// Отображается значение поля name объекта dog:
dog.ShowName();
Console.ReadLine();
}
}
Метод Main() мы описали с атрибутом public. Здесь мы последо-
вали общей рекомендации: описывать главный метод программы
как открытый. Вместе с тем и без этого атрибута программа будет
работать.
Это полный программный код, в котором, помимо уже знакомого нам
класса MyClass, есть еще один класс, ObjDemo, в котором описан метод
Объектные переменные и создание объектов 59
Main(). В этом методе, в свою очередь, создаются и используются объек-
ты класса MyClass. Поскольку программный код класса MyClass мы уже
анализировали, остановим свое внимание на программном коде метода
Main(). Вкратце сюжет пьесы такой. Создается два объекта cat и dog клас-
са MyClass. Полям name этих объектов присваиваются значения, после чего
значения этих полей выводятся в консоль. Объект cat создается в два
этапа. Сначала командой MyClass cat объявляется объектная переменная
класса MyClass. Непосредственно создание объекта класса MyClass и при-
сваивание ссылки на этот объект переменной cat выполняется командой
cat=new MyClass(). Создание второго объекта выполняется с помощью ко-
манды MyClass dog=new MyClass(). Здесь и объектная переменная создает-
ся, и объект, и ссылка на объект присваивается объектной переменной.
На следующем витке эволюции полям новоиспеченных объектов при-
сваиваются значения. Для объекта cat мы используем простую прямую
команду cat.name="Мурчик". Здесь мы встречаемся с примером точечного