В приведенном ниже примере программы создаются два класса исключений: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() в<имя_файла>:строка 3 6

Обратите внимание на порядок следования операторовcatch.Именно в таком порядке они и должны выполняться. КлассExceptBявляется производным от классаExceptA,поэтому исключение типаExceptBдолжно перехватываться до исключения типаExceptA.Аналогично, исключение типаException(т.е. базового класса для всех исключений) должно перехватываться последним. Для того чтобы убедиться в этом, измените порядок следования операторовcatch.В итоге это приведет к ошибке во время компиляции.

Перейти на страницу:

Похожие книги