ПРИМЕЧАНИЕ Это не всегда так. Есть классы, которые представляют интерес сами
по себе, без всяких там объектов. Обычно это классы со статическими
методами, которые играют роль библиотеки.
В этой главе мы расширим свои познания в области создания классов.
Классы могут быть самыми разными, но нас пока интересуют наиболее
простые варианты. В ближайшем будущем мы будем использовать следую-
щий шаблон для создания классов:
class имя_класса{
public тип_поля имя_поля;
public тип_результата имя_метода(аргументы){
// код метода
}
}
ПРИМЕЧАНИЕ Члены класса (в данном случае поля и методы) могут быть закрытыми
и открытыми. Закрытые члены класса — это члены, которые класс
приберегает «для себя», то есть для использования исключительно
в пределах класса. Открытые члены класса можно использовать не
только внутри класса, но и вне его. Именно такие члены класса пока
что нас и будут интересовать.
Блок с кодом класса начинается ключевым словом class, после которого
указывается имя класса, а тело класса заключается в фигурные скобки.
Собственно класс — то, что находится в фигурных скобках. А в скобках
может находиться описание полей и методов (и некоторых членов класса).
Поля описываются как обычные переменные: указывается тип переменной
и ее имя. Описание метода выполняется по такому шаблону:
идентификатор типа результата — ключевое слово, которое определяет
тип значения, возвращаемого методом в качестве результата;
имя метода;
Описание класса 55
в круглых скобках указывается список аргументов. Аргументы пере-
числяются через запятую, для каждого аргумента указывается тип. Если
аргументов нет, скобки все равно есть — пустые;
программный код метода (тело метода) заключается в фигурные скобки.
И поля, и методы описываются с ключевым словом public, что означает их
доступность за пределами класса.
В качестве иллюстрации рассмотрим программный код с описанием клас-
са, представленный в листинге 2.1.
Листинг 2.1. Класс с полем и двумя методами
class MyClass{
// Поле класса:
public string name;
// Метод класса для присваивания "имени":
public void SetName(string arg){
// Присваиваем значение полю name:
name=arg;
// Отображаем сообщение об изменении
// значения поля name:
Console.WriteLine("Присвоено значение полю name.");
}
// Метод класса для отображения "имени":
public void ShowName(){
// Отображаем сообщение со значением
// поля name:
Console.WriteLine("Значение поля name: "+name);
}
}
Наш класс называется MyClass. У класса одно поле и два метода. Поле называ-
ется name, и это поле текстовое — оно объявляется как переменная типа string.
Что касается методов, то оба они не возвращают результат. Поэтому в каче-
стве идентификатора типа результата использовано ключевое слово void.
У метода SetName() один текстовый аргумент (объявлен как string arg).
В теле метода командой name=arg полю name присваивается значение, как у ар-
гумента arg. Затем командой Console.WriteLine("Присвоено значение полю
name.") в консоль выводится сообщение с информацией о том, что значе-
ние поля name изменено.
У метода ShowName() аргументов нет. Единственной командой Console.
Write Line("Значение поля name: "+name) в теле метода отображается кон-
сольное сообщение с информацией о значении поля name.
56
Глава 2. Классы и объекты
ПРИМЕЧАНИЕ В методах почти массово используется обращение к полю name. Ре-
зонным образом возникает вопрос, о поле name какого объекта идет
речь? Ведь у каждого объекта класса есть поле name. Поэтому сколько
объектов класса, столько разных полей, и каждое называется name.
Но проблемы здесь на самом деле нет — обращение выполняется
к полю того объекта, из которого вызывается метод.
На этом описание класса заканчивается, и остается лишь проверить, какая
от этого класса может быть польза. Нам предстоит несколько расширить
программный код. Он будет содержать не только описание класса, но и ин-
струкции по созданию объектов на основе этого класса.
Объектные переменные
и создание объектов
Очень убедительно. Мы подумаем,
к кому это применить.
Нам предстоит еще одно усилие на пути изучения классов — мы будем
создавать объекты. В C# процедура создания объекта (в широком смысле
этого понятия) имеет некоторые особенности, если сравнивать, например, с созданием обычной переменной (не объекта). Условно процесс создания
объекта можно разбить на два этапа:
создание объектной переменной;
создание объекта с присваиванием значения объектной переменной.
Строго говоря, при создании объекта указывается не имя класса, а конструктор класса. Конструктор класса — это такой специальный
метод. Одна из его особенностей состоит в том, что имя конструктора
совпадает с именем метода. Даже если мы конструктор в классе не
описывали, он все равно существует — это так называемый конструк-
тор по умолчанию. У такого конструктора нет аргументов — отсюда
и пустые круглые скобки после имени класса в инструкции создания