• В данном образце предполагается, что в теле охраняемого блока анализируется возможность возникновения исключительной ситуации и, в случае обнаружения опасности, выбрасывается собственное исключение, класс которого задан программно. В соответствии с этим тело
• Если в методе
• Для простоты приведен только один
• Когда число попыток еще не исчерпано, обработчик исключения переменной
• Как видите, эта схема реализует два корректных исхода обработки исключительной ситуации —
Доведем этот образец до реально работающего кода, где угроза исключения зависит от значения генерируемого случайного числа, а обработчик исключения может изменять границы интервала, повышая вероятность успеха.
Определим первым делом собственный класс исключений:
public class MyException: Exception
{
public MyException()
{ }
public MyException (string message): base(message)
{ }
public MyException (string message, Exception e): base(message, e)
{ }
}
Минимум того, что нужно сделать, определяя свои исключения, — это задать три конструктора класса, вызывающие соответствующие конструкторы базового класса Exception.
В классе
Random rnd = new Random();
int level = -10;
bool Success; //true — нормальное завершение
int count =1; // число попыток выполнения
const int maxcount =3;
Определим теперь методы, вызываемые в теле охраняемого блока:
void MakeJob()
{
Console.WriteLine("Подготовительные работы завершены");
}
bool CheckDanger()
{
//проверка качества и возможности продолжения работ
int low = rnd.Next(level,10);
if (low > 6) return (false);
return(true);
}
void MakeLastJob()
{
Console.WriteLine("Все работы завершены успешно");
}
В классе
public void TestPattern ()
{
Excepts ex1 = new Excepts ();
try
{
ex1.Pattern ();
}
catch (Exception e)
{
Console.WriteLine("исключительная ситуация при вызове Pattern");
Console.WriteLine(e.ToString ());
}
}