День шестьдесят второй. #ЗаметкиНаПолях
Исключения. Начало
Конструируя тип, мы заранее пытаемся представить, в каких ситуациях он будет использоваться. Форма определения членов типа (типы данных свойств, параметры методов, возвращаемые значения и т.п.) становится интерфейсом типа. Члены типа определяют допустимые действия с типом и его экземплярами. Если член типа не может решить возложенную на него задачу, должно появляться исключение.
Пример обработки исключений:
1. Исключения представляют собой типы, производные в конечном счете от
2. Блок
3. Когда внутри такого блока try возникает исключение, поток управления переходит к первому подходящему обработчику исключений в стеке вызовов. В C# ключевое слово
4. Если блок
5. Просмотр блоков
6. Если для созданного исключения не существует обработчиков, выполнение программы прекращается с сообщением об ошибке.
7. Программа может явным образом создавать исключения с помощью ключевого слова
8. Объекты исключения содержат подробные сведения об ошибке, например состояние стека вызовов и текстовое описание ошибки.
9. Код в блоке
Источники:
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 20.
- https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/exceptions/
Исключения. Начало
Конструируя тип, мы заранее пытаемся представить, в каких ситуациях он будет использоваться. Форма определения членов типа (типы данных свойств, параметры методов, возвращаемые значения и т.п.) становится интерфейсом типа. Члены типа определяют допустимые действия с типом и его экземплярами. Если член типа не может решить возложенную на него задачу, должно появляться исключение.
Пример обработки исключений:
try {Свойства исключений:
// код, требующий корректного восстановления или очистки ресурсов при возникновении исключения
}
catch (InvalidOperationException) {
// обработка исключения типа InvalidOperationException
}
catch (IOException ex) {
// обработка исключения типа IOException
// информация об исключении будет в переменной ex
}
catch {
// обработка остальных типов исключений
}
finally {
// код очистки ресурсов после операций блока try
// этот код исполняется ВСЕГДА
}
// код после блока finally выполняется, если не было сгенерировано исключений, либо если они были перехвачены блоками catch, а новых не генерировалось
1. Исключения представляют собой типы, производные в конечном счете от
System.Exception
.2. Блок
try
используется для выполнения таких инструкций, которые могут создавать исключения. Блок try
должен быть связан хотя бы с одним блоком catch
или finally
.3. Когда внутри такого блока try возникает исключение, поток управления переходит к первому подходящему обработчику исключений в стеке вызовов. В C# ключевое слово
catch
обозначает обработчик исключений. Если исключения не возникает, код в блоке catch не выполняется.4. Если блок
catch
определяет переменную исключения, ее можно использовать для получения дополнительных сведений о типе созданного исключения.5. Просмотр блоков
catch
осуществляется сверху вниз, поэтому исключения должны указываться в порядке от более специализированных к их базовым классам (если они есть) и наконец, к классу System.Exception
. Иначе компилятор сообщит об ошибке, т.к. более узкоспециализированные блоки окажутся недостижимыми. 6. Если для созданного исключения не существует обработчиков, выполнение программы прекращается с сообщением об ошибке.
7. Программа может явным образом создавать исключения с помощью ключевого слова
throw
.8. Объекты исключения содержат подробные сведения об ошибке, например состояние стека вызовов и текстовое описание ошибки.
9. Код в блоке
finally
выполняется даже в том случае, если создано исключение. Используйте блок finally
, чтобы высвободить ресурсы, например закрыть потоки и файлы, которые были открыты внутри блока try
. Блок finally
помещается после всех блоков catch
. Одному блоку try может соответствовать только один блок finally
.Источники:
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 20.
- https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/exceptions/