Отладка и тестирование приложений в среде Visual Studio 2005. Евсеева О.Н - 26 стр.

UptoLike

Составители: 

26
if (count > maxcount)
throw(new MyException("Три попытки были безуспешны"));
Success = false;
count++;
//корректировка ситуации
Console.WriteLine("Попытка исправить ситуацию!");
level += 1;
}
} while (!Success);
}
Конструкция try-catch блоков помещается в цикл do-while(!Success), за-
вершаемый в случае успешной работы охраняемого блока, за чем следит булева
переменная Success.
В данном образце предполагается, что в теле охраняемого блока анализи-
руется возможность возникновения исключительной ситуации и, в случае об-
наружения опасности, выбрасывается собственное исключение, класс которого
задан программно. В соответствии с этим тело try-блока содержит вызов метода
MakeJob, выполняющего некоторую часть работы, после чего вызывается метод
CheckDanger, выясняющий, не возникла ли опасность нарушения специфика-
ции, и может ли работа быть продолжена. Если все нормально, то выполняется
метод MakeLastJob, выполняющий заключительную часть работы. Управление
вычислением достигает конца try-блока, он успешно завершается и, поскольку
остается истинной переменная Success, значение true которой установлено в
начале try-блока, то цикл while, окаймляющий охраняемый блок и его обработ-
чиков исключений, также успешно завершается.
Если в методе CheckDanger выясняется, что нормальное продолжение вы-
числений невозможно, то выбрасывается исключение класса MyException. Оно
перехватывается обработчиком исключения, стоящим за try-блоком, поскольку
класс MyException указан как класс формального аргумента.
Для простоты приведен только один catch-блок. В общем случае их мо-
жет быть несколько, но все они строятся по единому образцу. Предполагается,
что обработчик исключения может сделать несколько попыток исправить си-
туацию, после чего повторно выполняется охраняемый блок. Если же число по-
пыток, за которым следит переменная count, превосходит максимально допус-
тимое, то обработчик выбрасывает новое исключение, задавая дополнительную
информацию и передавая тем самым обработку ошибки на следующий уровень
вызываемой программе.
Когда число попыток еще не исчерпано, обработчик исключения пере-
менной Success дает значение false, гарантирующее повтор выполнения try-
блока, увеличивает счетчик числа попыток и пытается исправить ситуацию.
Как видите, эта схема реализует два корректных исхода обработки ис-
ключительной ситуацииRetry и Rescueповтор с надеждой выполнить обяза-
тельства и передачу управления вызывающей программе, чтобы она предпри-