Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения должны иметь возможность обрабатывать ошибки, возникающие во время выполнения последовательно. .NET предоставляет модель для уведомления приложений об ошибках в единообразном виде: операции .NET указывают на сбой путем создания исключений.
Исключения
Исключением является любое условие ошибки или непредвиденное поведение, обнаруженное исполняемой программой. Исключения могут возникать из-за сбоя в коде или в коде, который вызывается (например, общая библиотека), недоступных ресурсов операционной системы, непредвиденных условий, с которыми сталкивается среда выполнения (например, код, который не может быть проверен) и т. д. Приложение может восстановиться после некоторых из этих ситуаций, но не от других. Хотя вы можете восстановить из большинства исключений приложений, вы не можете восстановить из большинства исключений среды выполнения.
В .NET исключение — это объект, наследуемый от System.Exception класса. Исключение генерируется из блока кода, в котором возникла проблема. Исключение передается в стек до тех пор, пока приложение не обработает его или программа завершит работу.
Исключения и традиционные методы обработки ошибок
Традиционно модель обработки ошибок языка зависит от уникального способа обнаружения ошибок и поиска обработчиков для них или механизма обработки ошибок, предоставляемого операционной системой. Способ реализации обработки исключений .NET обеспечивает следующие преимущества:
Создание и обработка исключений работает одинаково для языков программирования .NET.
Не требуется какой-либо синтаксис языка для обработки исключений, но позволяет каждому языку определять собственный синтаксис.
Исключения можно создавать в пределах процесса и даже границы компьютера.
Код обработки исключений можно добавить в приложение для повышения надежности программы.
Исключения предлагают преимущества других методов уведомления об ошибках, таких как коды возврата. Сбои не остаются незамеченными, потому что если возникает исключение и его не обработать, среда выполнения завершает работу вашего приложения. Недопустимые значения не продолжают распространяться по системе из-за кода, который не проверяет на наличие кода возврата ошибки.
Распространенные исключения
В следующей таблице перечислены некоторые распространенные исключения с примерами того, что может их вызвать.
| Тип исключения | Описание | Пример |
|---|---|---|
| Exception | Базовый класс для всех исключений. | Нет (используйте производный класс этого исключения). |
| IndexOutOfRangeException | Создается средой выполнения только в том случае, если массив индексируется неправильно. | Индексирование массива за пределами допустимого диапазона: arr[arr.Length+1] |
| NullReferenceException | Создается средой выполнения только при ссылке на пустой объект. | object o = null; o.ToString(); |
| InvalidOperationException | Выбрасывается методами, когда в недопустимом состоянии. | Вызов Enumerator.MoveNext() после удаления элемента из базовой коллекции. |
| ArgumentException | Базовый класс для всех исключений аргументов. | Нет (используйте производный класс этого исключения). |
| ArgumentNullException | Вызывается методами, которые не позволяют аргументу иметь значение NULL. | String s = null; "Calculate".IndexOf(s); |
| ArgumentOutOfRangeException | Вызывается методами, которые проверяют, находятся ли аргументы в заданном диапазоне. | String s = "string"; s.Substring(s.Length+1); |
См. также
- Класс исключений и свойства
- Как использовать блок Try-Catch для перехвата исключений
- Как использовать конкретные исключения в блоке Catch
- Как: Явно выбрасывать исключения
- Практическое руководство. Создание исключений User-Defined
- Использование обработчиков исключений User-Filtered
- Как использовать блоки Finally
- Обработка исключений взаимодействия COM
- Рекомендации по обработке исключений
- Что необходимо знать о исключениях во время выполнения для каждого разработчика.