На этом шаге мы рассмотрим создание и использование таких классов.
Мы можем создать собственный класс исключений. Схема очень простая и базируется на механизме наследования классов. Пользовательский класс исключения обычно создается наследованием класса 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, "Большая ошибка");
Console.WriteLine(e); .
На следующем шаге мы рассмотрим инструкции checked и unchecked.