На этом шаге мы рассмотрим программу, иллюстрирующую использование механизма исключений.
Как описанная на предыдущем шаге схема используется на практике, проиллюстрировано в рассматриваемой далее программе. В этой программе сначала отображается диалоговое окно с сообщением о начале выполнения программы. Затем пользователю предлагается в окне с полем ввода указать действительное число. Если пользователь вводит число, то появляется соответствующее сообщение. Если пользователь не вводит ничего или вводит не число, появляется сообщение о том, что нужно было ввести число. Но в любом случае (ввел пользователь число или нет) перед завершением выполнения программы появляется еще одно сообщение. Теперь проанализируем приведенный ниже программный код.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.VisualBasic; namespace pr45_1 { class Program { static void Main() { // Сообщение о начале выполнения программы: MessageBox.Show("Выполняется программа!", "Начало"); // Перехват и обработка исключений: try {// Контролируемый код // Попытка преобразовать текст в число: Double.Parse( Interaction.InputBox( // Текст над полем ввода: "Введите действительное число:", // Заголовок окна: "Число" ) ); // Отображение сообщения: MessageBox.Show("Да, это было число!", "Число"); } // Блок обработки исключений: catch { // Отображение сообщения: MessageBox.Show( // Текст сообщения: "Надо было ввести число!", // Заголовок окна: "Ошибка", // В окне одна кнопка ОК: MessageBoxButtons.OK, // Используется пиктограмма ошибки: MessageBoxIcon.Error ); } // Завершение блока обработки исключений // Сообщение о завершении выполнения программы: MessageBox.Show("Программа завершена!", "Завершение"); } } }
В программе командой
MessageBox.Show("Выполняется программа!", "Начало");
Рис.1. Окно, которое отображается в начале выполнения программы
Затем выполняются команды в try-блоке (команды выполняются после того, как пользователь закрывает первое диалоговое окно с сообщением о начале выполнения программы). Команд в try-блоке всего две. Первой командой отображается диалоговое окно с полем ввода, считывается введенное пользователем значение (в текстовом формате) и выполняется попытка преобразовать введенное значение в число с плавающей точкой (действительное число). Диалоговое окно с полем для ввода числа показано на рисунке 2.
Рис.2. Окно с полем для ввода действительного числа
Для отображения диалогового окна использован метод InputBox(). Результатом метод возвращает текстовую строку со значением, введенным пользователем. Команда вызова метода InputBox() указана аргументом статического метода Parse() структуры Double (структура из пространства имен System). Метод пытается выполнить преобразование текстового представления числа в число. Если попытка удачная, то результатом метода является соответствующее число. Если же пользователь не ввел число (или ввел не число), то возникает ошибка.
Таким образом, если вызов метода Parse() из структуры Double прошел удачно, то пользователь ввел число. В этом случае в try-блоке выполняется следующая команда
MessageBox.Show("Да, это было число!", "Число");
Рис.3. Окно, которое отображается в случае, если пользователь ввел число
Если пользователь закрыл окно с полем ввода, щелкнув кнопку Отмена или системную пиктограмму, либо если он ввел не число, то при попытке получить числовое значение с помощью метода Parse() возникнет ошибка. В этом случае до выполнения команды
MessageBox.Show("Да, это было число!", "Число");
Как будет выглядеть отображаемое окно, показано на рисунке 4.
Рис.4. Окно, которое отображается, если пользователь ввел не число или отказался от ввода числа
Но вне зависимости от того, произойдет или не произойдет ошибка, в конце, перед завершением выполнения программы, командой
MessageBox.Show("Программа завершена!", "Завершение");
Рис.5. Окно, которое отображается перед завершением выполнения программы
Мы видим, что даже в таком упрощенном варианте обработка исключений - достаточно мощный механизм, значительно повышающий гибкость и надежность программного кода. Как мы узнаем впоследствии, возможности этого механизма в действительности намного шире. Например, можно по-разному выполнять обработку исключений разного типа. Но об этом речь пойдет немного позже.
На следующем шаге мы резюмируем все ранее сказанное по данной теме на предыдущих шагах.