В приведенном ниже примере программы создаются два класса исключений:ExceptAиExceptB.КлассExceptAявляется производным от классаException,а классExceptB— производным от классаExceptA.Затем в программе генерируются исключения каждого типа. Ради краткости в классах специальных исключений предоставляется только один конструктор, принимающий символьную строку, описывающую исключение. Но при разработке программ коммерческого назначения в классах специальных исключений обычно требуется предоставлять все четыре конструктора, определяемых в классеException.
// Исключения производных классов должны появляться до // исключений базового класса.
using System;
// Создать класс исключения, class ExceptA : Exception {
public ExceptA(string str) : base(str) { }
public override string ToStringO { return Message;
}
}
// Создать класс исключения, производный от класса ExceptA. class ExceptB : ExceptA {
public ExceptB(string str) : base(str) { }
public override string ToStringO { return Message;
}
}
class OrderMatters { static void Main {
for(int x = 0; x < 3; x++) {
try {
if (x==0) throw new ExceptA("Перехват исключения типа ExceptA"); else if(x==l) throw new ExceptB("Перехват исключения типа ExceptB");
else throw new Exception;
}
catch (ExceptB exc) {
Console.WriteLine(exc);
}
catch (ExceptA exc) {
Console.WriteLine(exc);
}
catch (Exception exc) {
Console.WriteLine(exc);
}
}
}
}
Вот к какому результату приводит выполнение этой программы.
Перехват исключения типа ExceptA.
Перехват исключения типа ExceptB.
System.Exception: Выдано исключение типа "System.Exception".
в OrderMatters.Main в
Обратите внимание на порядок следования операторовcatch.Именно в таком порядке они и должны выполняться. КлассExceptBявляется производным от классаExceptA,поэтому исключение типаExceptBдолжно перехватываться до исключения типаExceptA.Аналогично, исключение типаException(т.е. базового класса для всех исключений) должно перехватываться последним. Для того чтобы убедиться в этом, измените порядок следования операторовcatch.В итоге это приведет к ошибке во время компиляции.