Шаг 226.
Язык программирования C#. Начала.
Обработка исключений. Пользовательские классы исключений

    На этом шаге мы рассмотрим создание и использование таких классов.

    Мы можем создать собственный класс исключений. Схема очень простая и базируется на механизме наследования классов. Пользовательский класс исключения обычно создается наследованием класса ApplicationException (или Exception). Объекты такого класса могут иметь дополнительные свойства и методы, ориентированные на решение определенной прикладной задачи. Генерируются исключения пользовательских классов искусственно, а перехватываются и обрабатываются таким же способом, как и другие исключения. Программа, в которой описывается класс пользовательского исключения, а затем генерируется и обрабатывается исключение пользовательского типа, представлена ниже.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr226_1
{
    // Класс пользовательского исключения: 
    class MyException: ApplicationException {
        // Закрытое целочисленное поле: 
        private int code;
        // Конструктор:
        public MyException(int n, string txt): base(txt) { 
            code = n;
        }
        // Переопределение метода ToString():
        public override string ToString() {
            // Текстовая строка:
            string res = Message + "\nКод ошибки: " + code;
            // Результат метода: 
            return res;
        }
    }

    // Главный класс:
    class Program
    {
        // Главный метод:
        static void Main()
        {
            // Контролируемый код: 
            try
            {
                // Генерация пользовательского исключения: 
                throw new MyException(123, "Большая ошибка");
            }
            // Перехват и обработка исключения: 
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Ниже показано, как выглядит результат выполнения программы:


Рис.1. Результат выполнения программы

    Мы описали класс MyException, который наследует класс ApplicationException. В классе описано закрытое целочисленное поле code, а также мы описали конструктор класса с двумя аргументами. Первый целочисленный аргумент определяет значение поля code.

    Второй текстовый аргумент передается конструктору базового класса. Поэтому текстовый аргумент конструктора класса MyException определяет свойство Message объекта исключения. Кроме этого, в классе MyException переопределяется метод ToString(). Результатом метод возвращает текстовую строку, которая содержит описание ошибки (значение свойства Message) и значение поля code.

    В главном методе программы в контролируемом блоке командой

  throw new MyException(123, "Большая ошибка");
генерируется исключение пользовательского типа. Для перехвата исключения использован catch-блок, в котором указано имя класса Exception. Поскольку класс MyException является производным от класса ApplicationException, а он, в свою очередь, является производным от класса Exception, то данный catch-блок перехватывает сгенерированное исключение. Обработка исключения состоит в том, что выполняется команда
  Console.WriteLine(e);    . 
Для объекта исключения e автоматически вызывается метод ToString(), и в итоге в консольном окне появляется сообщение с описанием ошибки и значением целочисленного поля объекта ошибки. Эти значения были указаны при создании объекта исключения в команде с ключевым словом throw.

    На следующем шаге мы рассмотрим инструкции checked и unchecked.




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