Объектно-ориентированное программирование на С#. Андрианова А.А - 113 стр.

UptoLike

113
catch (DimensionProductException ex)
{
// вызов обработчика исключения, связанного
// умножением матриц
ex.ExceptionHandler();
}
catch (BadDimensionException ex)
{
// вызов обработчика исключения, связанного
// созданием матрицы некорректного размера
ex.ExceptionHandler();
}
. . .
Согласно принципу полиморфизма можно создавать один обработчик
catch для нескольких видов исключений. Если имеется иерархия классов-
исключений, достаточно создавать обработчик catch только для
исключения базового типа. Универсальная обработка исключений-
наследников производится с помощью переопределения виртуальных
функций базового класса.
Например, создадим абстрактный базовый класс иерархии класс
MatrixException. В нем объявим абстрактный метод
ExceptionHandler(), который предназначен для обработки ошибки. Все
классы-исключения теперь должны наследовать от класса
MatrixException и переопределять абстрактный метод
ExceptionHandler() этого класса. Классы-наследники могут содержать
и другие методы, которые позволяют, если не устранить ошибку, то хотя бы
предотвратить ее влияние на последующий ход выполнения программы
(корректное освобождение ресурсов, занимаемых объектом, присвоение
переменным объекта корректных значений и пр.). Вызвать эти методы можно
из метода ExceptionHandler() конкретного класса.
Таким образом, иерархия классов исключений может быть
представлена в следующем виде:
   catch (DimensionProductException ex)
   {
       // вызов обработчика исключения, связанного
       // умножением матриц
       ex.ExceptionHandler();
   }
   catch (BadDimensionException ex)
   {
       // вызов обработчика исключения, связанного
       // созданием матрицы некорректного размера
       ex.ExceptionHandler();
   }
     .     .    .

      Согласно принципу полиморфизма можно создавать один обработчик
catch для нескольких видов исключений. Если имеется иерархия классов-
исключений, достаточно создавать обработчик catch только для
исключения базового типа. Универсальная обработка исключений-
наследников производится с помощью переопределения виртуальных
функций базового класса.
      Например, создадим абстрактный базовый класс иерархии – класс
MatrixException.         В    нем     объявим      абстрактный     метод
ExceptionHandler(), который предназначен для обработки ошибки. Все
классы-исключения     теперь    должны       наследовать    от    класса
MatrixException          и    переопределять      абстрактный      метод
ExceptionHandler() этого класса. Классы-наследники могут содержать
и другие методы, которые позволяют, если не устранить ошибку, то хотя бы
предотвратить ее влияние на последующий ход выполнения программы
(корректное освобождение ресурсов, занимаемых объектом, присвоение
переменным объекта корректных значений и пр.). Вызвать эти методы можно
из метода ExceptionHandler() конкретного класса.
      Таким образом, иерархия классов исключений            может быть
представлена в следующем виде:




                                                                     113