Выбрать главу

ректный символ для арифметической операции.

Рис. 1.16.  Работа программы прекращена из-за некорректного символа

арифметической операции

52

Глава 1. Информация к размышлению: язык C# и даже больше

Наконец, реакция программы на некорректное числовое значение показа-

на на рис. 1.17.

Рис. 1.17.  Работа программы прекращена из-за некорректного числа

Желающие могут еще поупражняться в работе программы и подвергнуть

ее всевозможным испытаниям. У нас же есть более важные задачи, к реше-

нию которых мы приступим в следующей главе.

Классы и объекты

Хотите обмануть мага? Боже, какая

детская непосредственность. Я же вижу

вас насквозь.

Из к/ф «31 июня»

С классами мы уже сталкивались — собственно, ни одна наша программа

не обошлась без класса. Об объектах речь тоже уже шла. Но назвать это

знакомством с классами и объектами было бы с нашей стороны несколько

самонадеянно. Здесь мы постараемся систематизировать и привести в толк

наши познания в данной области. Мы это сделаем, поскольку альтернати-

вы у нас нет — без классов и объектов о программировании в C# можно

и не мечтать.

Описание класса

Это экспонаты. Отходы, так сказать,

магического производства.

Из к/ф «Чародеи»

Мы уже примерно представляем, что такое класс. Во всяком случае, классы

мы использовали каждый раз, когда писали программу. Вместе с тем каж-

дый раз у нас был лишь один класс, причем довольно специфический —

для этого класса мы не создавали объекты. Главное его предназначение

54

Глава 2. Классы и объекты

состояло в том, что в классе описывался метод Main(), во многих отноше-

ниях отождествляемый с программой. В этой главе мы перейдем на ка-

чественно новый уровень программирования — наши программы будут

содержать несколько классов. Также мы узнаем, как на основе классов соз-

даются объекты — ведь в конечном счете именно для создания объектов

нужен класс.

ПРИМЕЧАНИЕ Это не всегда так. Есть классы, которые представляют интерес сами

по себе, без всяких там объектов. Обычно это классы со статическими

методами, которые играют роль библиотеки.

В этой главе мы расширим свои познания в области создания классов.

Классы могут быть самыми разными, но нас пока интересуют наиболее

простые варианты. В ближайшем будущем мы будем использовать следую-

щий шаблон для создания классов:

class имя_класса{

public тип_поля имя_поля;

public тип_результата имя_метода(аргументы){

// код метода

}

}

ПРИМЕЧАНИЕ Члены класса (в данном случае поля и методы) могут быть закрытыми

и открытыми. Закрытые члены класса — это члены, которые класс

приберегает «для себя», то есть для использования исключительно

в пределах класса. Открытые члены класса можно использовать не

только внутри класса, но и вне его. Именно такие члены класса пока

что нас и будут интересовать.

Блок с кодом класса начинается ключевым словом class, после которого

указывается имя класса, а тело класса заключается в фигурные скобки.

Собственно класс — то, что находится в фигурных скобках. А в скобках

может находиться описание полей и методов (и некоторых членов класса).

Поля описываются как обычные переменные: указывается тип переменной

и ее имя. Описание метода выполняется по такому шаблону:

 идентификатор типа результата — ключевое слово, которое определяет

тип значения, возвращаемого методом в качестве результата;

 имя метода;

Описание класса           55

 в круглых скобках указывается список аргументов. Аргументы пере-

числяются через запятую, для каждого аргумента указывается тип. Если

аргументов нет, скобки все равно есть — пустые;

 программный код метода (тело метода) заключается в фигурные скобки.

И поля, и методы описываются с ключевым словом public, что означает их

доступность за пределами класса.

В качестве иллюстрации рассмотрим программный код с описанием клас-

са, представленный в листинге 2.1.

Листинг 2.1.  Класс с полем и двумя методами

class MyClass{

// Поле класса:

public string name;

// Метод класса для присваивания "имени":

public void SetName(string arg){

// Присваиваем значение полю name:

name=arg;

// Отображаем сообщение об изменении

// значения поля name: