Пользовательские исключения
В С# имеется возможность обрабатывать исключения, создаваемые программистом.
Для этого достаточно определить класс как производный от класса Exception или от класса ApplicationException, "родоначальника" иерархии, зарезервированной для исключений, связанных с прикладными программами.
Пример 1.
class MyArrayException1 : ApplicationException
{
HelpLink = "Смотри файл Readme.txt";
Source = "Программа PGM1";
public MyArrayException1 (string Message) : base(Message)
{ }
}
Пример 2.
class MyArrayException2 : ApplicationException
{
// Реализуем стандартные конструкторы.
public MyArrayException2() : base() { }
public MyArrayException2 (string Message) : base(Message)
{ }
// Переопределяем метод ToString ()
public override string ToString()
{
return Message;
}
}
Пример 3.
class MyArrayException3 : ApplicationException
{
public MyArrayException3()
: base ("Выход за границу массива")
{ }
}
Третий пример практически ничего оригинального не вносит, поэтому вместо создания нового класса достаточно использовать существующий, например:
Exception myExc = new Exception ("Выход за границу массива");
throw myExc;
или
throw new Exception ("Выход за границу массива");
или
throw new IndexOutOfRangeException ("Выход за границу массива");
Перехват исключений производных классов
Если нужно перехватывать исключения и базового, и производного класса, поместите первой в catch-последовательности инструкцию с заданием производного класса. В противном случае catch-инструкция с заданием базового класса будет перехватывать все исключения производных клаcсов.
// Инструкции перехвата исключений производных классов
// должны стоять перед инструкциями перехвата
// исключений базовых классов.
using System;
class ExceptA : ApplicationException
{
public ExceptA() : base() { }
public ExceptA (string str) : base(str) { }
}
class ExceptB : ExceptA
{
public ExceptB() : base() { }
public ExceptB (string str) : base(str) { }
}
class OrderMatters
{
public static void Main()
{
for (int x = 0; x < 3; x++)
{
try
{
if (x == 0) throw new ExceptA (
"Исключение типа ExceptA.");
else if (x == 1) 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);
}
}
}
}
Дата добавления: 2019-02-08; просмотров: 615;