Иерархия исключений
Существует два типа исключений: исключения, созданные исполняемой программой, и исключения, созданные общеязыковой средой выполнения. Кроме того, существует иерархия исключений, которые могут быть созданы приложением или средой выполнения.
Класс 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 |
Генерируется средой выполнения только при неправильной индексации массива. |
Индексирование массива вне его действительного диапазона: arr[arr.Length+1] |
|
SystemException |
Создается средой выполнения только при ссылке на пустой объект. |
object o = null; o.ToString(); |
|
Создается средой выполнения только при доступе к недопустимому участку памяти. |
Возникает при взаимодействии с неуправляемым кодом или с небезопасным управляемым кодом, а также при использовании неправильного указателя. |
||
SystemException |
Генерируется методами в случае недопустимого состояния. |
Вызов Enumerator.GetNext() после удаления Item из соответствующей коллекции. |
|
SystemException |
Базовый класс для всех исключений аргументов. |
Отсутствует (используйте класс, производный от этого исключения). |
|
ArgumentException |
Генерируется методами, для которых не допускается пустое значение аргументов. |
String s = null; "Calculate".IndexOf (s); |
|
ArgumentException |
Генерируется методами, проверяющими принадлежность аргументов к заданному диапазону. |
String s = "string"; s.Chars[9]; |
|
SystemException |
Базовый класс для исключений, происходящих или предназначенных для сред вне среды выполнения. |
Отсутствует (используйте класс, производный от этого исключения). |
|
ExternalException |
Исключение, инкапсулирующее сведения HRESULT COM. |
Используется при взаимодействии COM. |
|
ExternalException |
Исключение, инкапсулирующее структурированные данные обработки исключений Win32. |
Используется в операциях с неуправляемым кодом. |
См. также
Основные понятия
Класс Exception и его свойства
Лучшие методики обработки исключений
Обработка и создание исключений