Основы языка C# 2005. Евсеева О.Н - 48 стр.

UptoLike

Составители: 

52
выбрасыванию исключения соответствующего типа, следствием чего является
прерывание нормального хода выполнения программы и передача управления
обработчику исключениястандартному или предусмотренному самой
программой. Вызывающая программа должна анализировать результат, чтобы
понять, была ли ошибка в работе вызванной функции и какова ее природа. При
программировании в стиле C# ответственность за обнаружение ошибок лежит
на вызванной программе. Она должна не только обнаружить ошибку, но и явно
сообщить о ней, генерируя исключение соответствующего типа. Вызываемая
программа должна попытаться исправить последствия ошибки в обработчике
исключения.
В состав библиотеки NFCL входит класс Exception, свойства и методы
которого позволяют работать с исключениями как с объектами, получать
нужную информацию, дополнять объект собственной информацией. У класса
Exception большое число потомков, каждый из которых описывает
определенный тип исключения. При проектировании собственных классов
можно параллельно проектировать и классы, задающие собственный тип
исключений, который может выбрасываться в случае ошибок при работе
методов класса. Создаваемый класс исключений должен быть потомком класса
Exception.
Если в некотором модуле предполагается возможность появления
исключений, то разумно предусмотреть и их обработку. В этом случае в модуле
создается охраняемый try-блок, предваряемый ключевым словом try. Вслед за
этим блоком следуют один или несколько блоков, обрабатывающих
исключения, – catch-блоков. Каждый catch-блок имеет формальный параметр
класса Exception или одного из его потомков. Если в try-блоке возникает
исключение типа T, то catch-блоки начинают конкурировать в борьбе за
перехват исключения. Первый по порядку catch-блок, тип формального
аргумента которого согласован с типом Tсовпадает с ним или является его
потомкомзахватывает исключение и начинает выполняться; поэтому порядок
написания catch-блоков небезразличен. Вначале должны идти
специализированные обработчики. Универсальным обработчиком является
catch-блок с формальным параметром родового класса Exception,
согласованным с исключением любого типа T. Универсальный обработчик,
если он есть, стоит последним, поскольку захватывает исключение любого
типа. Исключение может быть нужным образом обработано, после чего
продолжится нормальный ход вычислений приложения.
Гораздо хуже, когда возникают ошибки в работе процедуры, не
приводящие к исключениям. Тогда работа продолжается с неверными данными
без исправления ситуации и даже без уведомления о возникновении ошибки.
Наш пример показывает, что вычисления в C# могут быть небезопасными и
следует применять специальные средства языка, такие как, например, checked-
блоки, чтобы избежать появления подобных ситуаций.