объект. В этом смысле вполне логичными могли бы быть такие команды: 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="Мурчик". Здесь мы встречаемся с примером точечного
синтаксиса. Это классика жанра — для ссылки на поле name объекта cat мы указываем имя объекта и, через точку, имя поля. Присваиваемое полю
значение указано справа от оператора присваивания. По-другому мы по-
ступаем с объектом dog. Для этого командой dog.SetName("Шарик") из объ-
екта dog вызывается метод SetName() с текстовым аргументом, который
присваивается полю name этого объекта. Здесь мы также имеем дело с то-
чечным синтаксисом.
ПРИМЕЧАНИЕ Обратите внимание на то, что в соответствии с кодом метода SetName() в консоль выводится сообщение о присвоении значения
полю name.
Кульминацией программы являются команды cat.ShowName() и dog.Show
Name(), которыми в консоль выводятся сообщения о значении полей name соответствующих объектов.
Напоминаем, что команда Console.ReadLine() нужна исключительно
для того, чтобы окно консоли не закрылось сразу по выполнении
предыдущих инструкций.
Результат выполнения программы представлен на рис. 2.1, где показано