Иерархия исключений

Существует два типа исключений: исключения, созданные исполняемой программой, и исключения, созданные общеязыковой средой выполнения. Кроме того, существует иерархия исключений, которые могут быть созданы приложением или средой выполнения.

Класс Exception является базовым классом для исключений. Несколько классов исключений наследуются непосредственно от Exception, в том числе ApplicationException и SystemException. Эти два класса образуют основу почти для всех исключений среды выполнения.

Большинство исключений, полученных непосредственно из Exception, не добавляют функциональность к классу Exception. Например, иерархия класса InvalidCastException следующая:

Object    Исключение       SystemException          InvalidCastException

Среда выполнения создает соответствующий производный класс SystemException при возникновении исключения. Эти ошибки возникают в результате сбоев при проверках, выполняемых средой выполнения (таких как ошибки выхода массива за границы диапазона), и могут возникать при выполнении любого метода. При разработке приложения, порождающего новые исключения, такие исключения следует создавать из класса Exception. Не рекомендуется перехватывать исключение SystemException или создавать исключение SystemException в пользовательских приложениях.

Наиболее серьезные исключения (создаются средой выполнения или в результате неустранимых условий) включают в себя ExecutionEngineException, StackOverflowException и OutOfMemoryException.

Исключения взаимодействия являются производными от SystemException и расширяются классом ExternalException. Например, COMException — это исключение, порождаемое в ходе операций COM-взаимодействия, производное от ExternalException. Классы Win32Exception и SEHException также являются наследниками ExternalException.

Иерархия исключений среды выполнения

Среда выполнения имеет базовый набор исключений, производных от класса SystemException, которые порождаются при выполнении отдельных инструкций. В следующей таблице приведен список иерархии стандартных исключений, предоставляемых средой выполнения, а также указаны те условия, при которых следует создавать производный класс.

Тип исключения

Базовый тип

Описание

Пример

Исключение

Объект

Базовый класс для всех исключений.

Отсутствует (используйте класс, производный от этого исключения).

SystemException

Исключение

Базовый класс для всех ошибок, созданных средой выполнения.

Отсутствует (используйте класс, производный от этого исключения).

IndexOutOfRangeException

SystemException

Генерируется средой выполнения только при неправильной индексации массива.

Индексирование массива вне его действительного диапазона:

arr[arr.Length+1]

NullReferenceException

SystemException

Создается средой выполнения только при ссылке на пустой объект.

object o = null;

o.ToString();

AccessViolationException

SystemException

Создается средой выполнения только при доступе к недопустимому участку памяти.

Возникает при взаимодействии с неуправляемым кодом или с небезопасным управляемым кодом, а также при использовании неправильного указателя.

InvalidOperationException

SystemException

Генерируется методами в случае недопустимого состояния.

Вызов Enumerator.GetNext() после удаления Item из соответствующей коллекции.

ArgumentException

SystemException

Базовый класс для всех исключений аргументов.

Отсутствует (используйте класс, производный от этого исключения).

ArgumentNullException

ArgumentException

Генерируется методами, для которых не допускается пустое значение аргументов.

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

Генерируется методами, проверяющими принадлежность аргументов к заданному диапазону.

String s = "string";

s.Chars[9];

ExternalException

SystemException

Базовый класс для исключений, происходящих или предназначенных для сред вне среды выполнения.

Отсутствует (используйте класс, производный от этого исключения).

ComException

ExternalException

Исключение, инкапсулирующее сведения HRESULT COM.

Используется при взаимодействии COM.

SEHException

ExternalException

Исключение, инкапсулирующее структурированные данные обработки исключений Win32.

Используется в операциях с неуправляемым кодом.

См. также

Основные понятия

Класс Exception и его свойства

Лучшие методики обработки исключений

Обработка и создание исключений

Другие ресурсы

Основы обработки исключений