Посты для тега : ‘исключения’

Базовая структура нейтрального к исключениям кода

Общая идея, лежащая в основе написания нейтрального к исключениям кода, подобна идее, лежащей в основе кода фиксации/отката (commit/rollback). При этом пишется такой код, который гарантирует, что если его выполнение не завершено, то вся операция отменяется без каких-либо последствий для состояния системы. Изменения в состоянии фиксируются только в том случае, когда код достигает конечной точки выполнения.

Читать далее »

Механизм обработки исключений в C#

Где должны обрабатываться исключения? Ответ можно найти, применив вариант шаблона Expert (Эксперт), который устанавливает, что работа должна выполняться сущностью, являющейся экспертом в данной области. Это — окольный путь уведомить, что исключение должно перехватываться в точке, где его действительно можно обработать с уровнем знаний, достаточным для того, чтобы справиться с исключительной ситуацией наилучшим образом.

Читать далее »

Обеспечение поведения отката

Разрабатывая нейтральные к исключениям методы, часто оказывается удобным механизм, который может выполнять откат любых изменений в случае генерации исключения. Эту задачу можно решить, применив классическую технику ввода дополнительного промежуточного уровня в виде вспомогательного класса. Для иллюстрации давайте воспользуемся объектом, который представляет соединение с базой данных и содержит методы по имени Commit (фиксация) и Rollback (откат).

Читать далее »

Обзор синтаксиса операторов try, catch и finally

Код внутри блока try защищен от исключений так, что если исключение сгенерировано, то исполняющая система ищет подходящий блок catch, чтобы его обработать. Независимо от того, существует или нет подходящий блок catch, если предусмотрен блок finally, он всегда выполняется, независимо от того, как поток управления покидает блок try.

Читать далее »

Изменения, касающиеся необработанных исключений, которые появились в .NET 2.0

Когда исключение сгенерировано, исполняющая система начинает искать в стеке соответствующий этому исключению блок catch. Проходя по стеку, она раскручивает его, очищая по пути каждый фрейм. Если поиск завершается в последнем фрейме потока, а обработчик исключения не найден, в этой точке исключение считается необработанным. Что случится дальше — зависит от того, какая версия .NET Framework используется […]

Читать далее »

Исключения, сгенерированные в статических конструкторах

Если исключение сгенерировано, а в стеке нет обработчика, поэтому его поиск завершается в статическом конструкторе типа, то исполняющая система обрабатывает этот случай специальным образом. Она транслирует исключение в System. TypelnitializationException и генерирует его взамен первоначального.

Читать далее »

Завершение потоков в C#

При вызове Thread.Abort рассматриваемый поток, в конце концов, получает ThreadAbortException. Поэтому, естественно, для аккуратного обслуживания этой ситуации необходимо обрабатывать исключение ThreadAbortException, если поток должен делать что-то особенное в случае его прерывания.

Читать далее »

Создание пользовательских классов исключений

У System.Exception имеются три общедоступных конструктора и один защищенный. Первый — это конструктор по умолчанию, который на самом деле мало что делает. Второй — конструктор, принимающий ссылку на строковый объект. Строка представляет собой общее, определяемое программистом сообщение, которое можно рассматривать как более дружественное к пользователю описание исключения. Третий конструктор также принимает строку сообщения, как и […]

Читать далее »

Наследование и исключения в Java

Создание сложных распределенных систем редко обходится без наследования и обработки исключений. Следует знать два правила для проверяемых исключений при наследовании: · переопределяемый метод в подклассе не может содержать в инструк­ции throws исключений, не обрабатываемых в соответствующем методе суперкласса;

Читать далее »
 
Rambler's Top100