Книга: C# для профессионалов. Том II

Исключения

Исключения

Исключения используются в C# таким же образом, как и в C++, кроме двух следующих различий:

? C# определяет блок finally, который содержит код, всегда выполняющийся в конце блока try независимо от того, порождалось ли какое-либо исключение. Отсутствие этого свойства C++ явилось причиной недовольства среди разработчиков C++. Блок finally выполняется, как только управление покидает блок catch или try, и содержит обычно код очистки выделенных в блоке try ресурсов.

? В C++ класс, порожденный в исключении, может быть любым классом. C#, однако, требует, чтобы исключение было классом, производным от System.Exception.

Правила выполнения программы в блоках try и catch идентичны в C++ и C#. Используемый синтаксис также одинаков, за исключением одного различия: в C# блок catch, который не определяет переменную для получения объекта исключения, обозначается самой инструкцией catch. Синтаксис C++:

catch (...) {

Синтаксис C#.

catch {

В C# этот вид инструкции catch может быть полезен для перехвата исключений, которые порождаются кодом, написанным на других языках (и которые поэтому могут не быть производными от System.Exception, компилятор C# отметит ошибку, если попробовать определить такой объект-исключение, но это не имеет значения для других языков программирования).

Полный синтаксис для try…catch…finally в C# выглядит следующим образом:

try {
 // обычный код
} catch (MyException e) { // MyException выводится из System.Exception
 // код обработки ошибки
}
// необязательные дополнительные блоки catch
finally {
 // код очистки
}

Отметим, что блок finally является необязательным. Также допустимо не иметь блоков catch, в этом случае конструкция try…finally служит просто способом обеспечения, чтобы код в блоке finally всегда выполнялся, когда происходит выход из блока try. Это может быть полезно, например, если блок try содержит несколько инструкций return и требуется выполнить очистку ресурсов, прежде чем метод реально возвратит управление.

Оглавление книги


Генерация: 0.210. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз