Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ООП C#.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

Строительные блоки обработки исключений в .Net

Программирование со структурированной обработкой исключений предусматривает использование четырех связанных между собой сущностей:

  • тип класса, который представляет детали исключения;

  • член, способный генерировать экземпляр класса исключения в вызывающем коде при соответствующих обстоятельствах;

  • блок кода на вызывающей стороне, обращающийся к члену, в котором может возникнуть исключение;

  • блок кода на вызывающей стороне, который будет обрабатывать (или перехватывать) исключение в случае его возникновения.

Язык программирования C# предлагает четыре ключевых слова (try, catch, throw и finally), которые позволяют генерировать и обрабатывать исключения. Объект, который представляет текущую проблему, относится к классу, расширяющему System. Exception (или производный от него класс). С учетом этого давайте сначала рассмотрим роль этого базового класса, связанного с исключениями.

Базовый класс System.Exception

Все исключения в конечном итоге порождены от базового класса System.Exception, который, в свою очередь, является производным от System.Object. Ниже показана основная часть этого класса (обратите внимание, что некоторые его члены являются виртуальными и, следовательно, могут быть переопределены в производных классах):

Как видите, многие свойства System.Exception по своей природе являются доступными только для чтения. Это объясняется тем, что стандартные значения для каждого из них обычно поставляются производными типами. Например, стандартное сообщение типа IndexOutOfRangeException выглядит так: “Index was outside the bounds of the array” (“Индекс вышел за границы массива”).

Простейший пример

Для демонстрации пользы от структурированной обработки исключений мы должны создать класс, который будет генерировать исключение в надлежащих (или, можно сказать, исключительных) обстоятельствах. Создадим новый проект консольного приложения на C# по имени SimpleException и определим в нем два класса (Саr (автомобиль) и Radio (радиоприемник)), связав их между собой отношением “имеет”. В классе Radio определен единственный метод, отвечающий за включение и выключение радиоприемника:

В дополнение к использованию класса Radio через включение/делегацию, класс Саr (код которого показан ниже) определен так, что когда пользователь превышает предопределенную максимальную скорость (заданную с помощью константного члена MaxSpeed), двигатель выходит из строя, приводя объект Саr в нерабочее состояние (что отражается закрытой переменной-членом типа bool по имени carIsDead). Кроме того, класс Саr имеет несколько свойств для представления текущей скорости и указанного пользователем “дружественного названия” автомобиля, а также различные конструкторы для установки состояния нового объекта Саr.

Создайте проект и реализуйте классы для радио и авто

Теперь реализуем метод Main(), в котором объект Саr будет превышать заданную максимальную скорость (установленную в 100 в классе Саr):

Вывод будет выглядеть следующим образом: