Принципы объектно-ориентированного программирования

         

Улавливание множества типов исключений



Улавливание множества типов исключений

В разных ситуациях вам может потребоваться блок try для обнаружения исключений различных типов. Так, о методе может быть известно, что он передает исключения нескольких различных типов, или в одном блоке try вам потребуются вызовы нескольких методов, причем о каждом методе известно, что он передает исключение своего типа. Тогда для исключения каждого типа, который вы хотите обработать, добавляется блок catch:

try {

Foo(); // Может передавать FooException.



Bar(); // Может передавать BarException. }

catch(FooException e) {

// Обработка ошибки. }

catch(BarException e) {

// Обработка ошибки. >

catch(Exception e) { >

Теперь исключение каждого типа может быть обработано в отдельном блоке catch (код обработки ошибки). Однако самое важное здесь то, что базовый класс обрабатывается последним. Это понятно: ведь все исключения являются производными от System.Exception, и если вы поместите блок catch для базового класса первым, до других блоков catch выполнение не дойдет. С учетом этого следующий код будет забракован компилятором:

try {

РоЪ(); // Может передавать FooException.

BarQ; // Может передавать BarException. }

catch(Exception e) {

// ""ОШИБКА - ЭТО КОМПИЛИРОВАТЬСЯ НЕ БУДЕТ }

catch(FooException e) {

// Обработка ошибки. }

catch(BarException e) <

// Обработка ошибки. }

// следуют в большинстве программ на С#), называть свои классы

// исключений, добавляя в конец слово "Exception". Например, если

// вы хотите сделатькласс Afv/ia/icyO-opAto производным от класса

Другое эмпирическое правило: при создании собственного производного класса исключений реализовывать все четыре конструктора 5vjfem.£xcepf/on. Повторю: это не обязательно, но это улучшиг совмее^имоси. с другим ходом на С#, которщй будет применять ваш пользователь.

 

Содержание раздела