Шаг 45.
Язык программирования C#. Начала
Управляющие инструкции. Перехват исключений (окончание)

    На этом шаге мы рассмотрим программу, иллюстрирующую использование механизма исключений.

    Как описанная на предыдущем шаге схема используется на практике, проиллюстрировано в рассматриваемой далее программе. В этой программе сначала отображается диалоговое окно с сообщением о начале выполнения программы. Затем пользователю предлагается в окне с полем ввода указать действительное число. Если пользователь вводит число, то появляется соответствующее сообщение. Если пользователь не вводит ничего или вводит не число, появляется сообщение о том, что нужно было ввести число. Но в любом случае (ввел пользователь число или нет) перед завершением выполнения программы появляется еще одно сообщение. Теперь проанализируем приведенный ниже программный код.

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.


Рис.1. Окно, которое отображается в начале выполнения программы

    Затем выполняются команды в try-блоке (команды выполняются после того, как пользователь закрывает первое диалоговое окно с сообщением о начале выполнения программы). Команд в try-блоке всего две. Первой командой отображается диалоговое окно с полем ввода, считывается введенное пользователем значение (в текстовом формате) и выполняется попытка преобразовать введенное значение в число с плавающей точкой (действительное число). Диалоговое окно с полем для ввода числа показано на рисунке 2.


Рис.2. Окно с полем для ввода действительного числа

   


В данном случае речь идет о вводе действительного числа. Не будет ошибкой, если пользователь введет целое число. Но также можно ввести и число в формате с плавающей точкой. Используемый в качестве "точки" символ - точка или запятая - определяется настройками операционной системы и среды разработки. На рисунке 2 в качестве "точки" использована запятая.

    Для отображения диалогового окна использован метод InputBox(). Результатом метод возвращает текстовую строку со значением, введенным пользователем. Команда вызова метода InputBox() указана аргументом статического метода Parse() структуры Double (структура из пространства имен System). Метод пытается выполнить преобразование текстового представления числа в число. Если попытка удачная, то результатом метода является соответствующее число. Если же пользователь не ввел число (или ввел не число), то возникает ошибка.


Мы знакомы со статическим методом Parse() из структуры Int32. Этот метод позволяет преобразовать текстовое представление целого числа в целое число. Метод с таким же названием, но уже из структуры Double, позволяет преобразовать текстовое представление для действительного числа в действительное число. Метод возвращает результат - число, полученное в результате преобразования. То есть результат вызова метода можно записать в переменную. В рассматриваемом примере мы этого не делаем, поскольку нас само число не интересует. Интерес представляет только сам факт того, что пользователь ввел число.

    Таким образом, если вызов метода Parse() из структуры Double прошел удачно, то пользователь ввел число. В этом случае в try-блоке выполняется следующая команда

  MessageBox.Show("Да, это было число!", "Число");
которой отображается окно с сообщением о том, что было введено число. Окно показано на рисунке 3.


Рис.3. Окно, которое отображается в случае, если пользователь ввел число

   

    Если пользователь закрыл окно с полем ввода, щелкнув кнопку Отмена или системную пиктограмму, либо если он ввел не число, то при попытке получить числовое значение с помощью метода Parse() возникнет ошибка. В этом случае до выполнения команды

  MessageBox.Show("Да, это было число!", "Число");
дело не дойдет. Выполнение блока try будет прекращено, и начнут выполняться команды в блоке catch. А в этом блоке всего одна команда, которой отображается диалоговое окно с сообщением об ошибке. Аргументами методу MessageBox.Show() передаются:

    Как будет выглядеть отображаемое окно, показано на рисунке 4.


Рис.4. Окно, которое отображается, если пользователь ввел не число или отказался от ввода числа

    Но вне зависимости от того, произойдет или не произойдет ошибка, в конце, перед завершением выполнения программы, командой

  MessageBox.Show("Программа завершена!", "Завершение");
отображается диалоговое окно, представленное на рисунке 5.


Рис.5. Окно, которое отображается перед завершением выполнения программы

    Мы видим, что даже в таком упрощенном варианте обработка исключений - достаточно мощный механизм, значительно повышающий гибкость и надежность программного кода. Как мы узнаем впоследствии, возможности этого механизма в действительности намного шире. Например, можно по-разному выполнять обработку исключений разного типа. Но об этом речь пойдет немного позже.

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




Предыдущий шаг Содержание Следующий шаг