не равно. Выражение op=='+'|op=='-' равно true, если значение переменной
op равно '+' или '' (и false во всех остальных случаях). Значение выраже-
ния op=='+'|op=='-'|op=='*'|op=='/' равно true, если переменная op равна
'+', или равна '', или равна '*', или равна '/'. Оператор логического отри-
цания ! превращает true в false и false в true. Поэтому значением выраже-
ния !(op=='+'|op=='-'|op=='*'|op=='/') будет true, только если переменная
op не равна ни одному из символьных значений '+', '', '*' или '/'. Други-
ми словами, значение выражения равно true, если мы ввели неправильный
символ операции. В этом случае благодаря условному оператору выводится
текстовое сообщение "Такая операция недопустима!" и инструкцией break завершается работа оператора цикла. Еще один способ цивилизованно вый-
ти из бесконечного циклического процесса — ввести некорректный символ
арифметической операции.
Блок try-catch предназначен, как уже отмечалась, для обработки ис-
ключительных ситуаций. Исключительная ситуация — это ошибка, которая возникает в процессе выполнения программы. В C# очень
элегантная и мощная встроенная система обработки ошибок. Ба-
зируется она как раз на конструкции try-catch. Основная идея, за-
ложенная в процедуру обработки ошибок, достаточно проста и эле-
гантна. Программный код, который может при выполнении вызвать
ошибку, заключается в блок try. После try-блока обычно следует
несколько catch-блоков. Каждый catch-блок предназначен для об-
работки ошибки определенного типа. Если в try-блоке в процессе
выполнения программы возникает ошибка, код try-блока перестает
выполняться, а вместо этого выполняется код соответствующего типу
ошибки catch-блока. В рассматриваемом примере использован всего
один catch-блок, который предназначен для обработки всех ошибок, которые могут возникнуть при выполнении программы.
Нам осталось разобрать только программный код в catch-блоке. Там всего
одна инструкция Console.WriteLine("Выполнена недопустимая команда."), которая выполняется, если при выполнении команд в блоке try возникнет
ошибка — любая. Если ошибка возникла, выполнение команд в try-блоке
Консольная программа 51
прекращается и выполняются команды в catch-блоке. После этого выпол-
няются команды, которые находятся после конструкции trycatch. Если
же при выполнении try-блока ошибки не возникают, catch-блок не выпол-
няется. С помощью такой нехитрой конструкции мы обеспечиваем более
устойчивую работу программы.
Протестируем работу программы. Для начала выделим несколько показа-
тельных ситуаций:
если вместо символа операции мы введем слово exit, работа программы
будет завершена;
если мы введем некорректный символ операции, работа программы будет
завершена;
если мы введем некорректное число, программа будет завершена.
Реализуем каждую из этих гипотетических ситуаций. На рис. 1.15 показа-
на ситуация, когда работа программы завершается вследствие ввода клю-
чевого слова exit.
Рис. 1.15. Работа программы завершена инструкцией exit На рис. 1.16 проиллюстрировано, что произойдет, если мы введем некор-
ректный символ для арифметической операции.
Рис. 1.16. Работа программы прекращена из-за некорректного символа
арифметической операции
52
Глава 1. Информация к размышлению: язык C# и даже больше
Наконец, реакция программы на некорректное числовое значение показа-
на на рис. 1.17.
Рис. 1.17. Работа программы прекращена из-за некорректного числа
Желающие могут еще поупражняться в работе программы и подвергнуть
ее всевозможным испытаниям. У нас же есть более важные задачи, к реше-
нию которых мы приступим в следующей главе.
Классы и объекты
Хотите обмануть мага? Боже, какая
детская непосредственность. Я же вижу
вас насквозь.
С классами мы уже сталкивались — собственно, ни одна наша программа
не обошлась без класса. Об объектах речь тоже уже шла. Но назвать это
знакомством с классами и объектами было бы с нашей стороны несколько
самонадеянно. Здесь мы постараемся систематизировать и привести в толк
наши познания в данной области. Мы это сделаем, поскольку альтернати-
вы у нас нет — без классов и объектов о программировании в C# можно
и не мечтать.
Описание класса
Это экспонаты. Отходы, так сказать,
магического производства.
Мы уже примерно представляем, что такое класс. Во всяком случае, классы
мы использовали каждый раз, когда писали программу. Вместе с тем каж-
дый раз у нас был лишь один класс, причем довольно специфический —
для этого класса мы не создавали объекты. Главное его предназначение
54
Глава 2. Классы и объекты
состояло в том, что в классе описывался метод Main(), во многих отноше-
ниях отождествляемый с программой. В этой главе мы перейдем на ка-
чественно новый уровень программирования — наши программы будут
содержать несколько классов. Также мы узнаем, как на основе классов соз-
даются объекты — ведь в конечном счете именно для создания объектов
нужен класс.