Оглавление:
Определение - Что означает «Окончательный блок»?
Блок finally в контексте C # относится к блоку операторов, которые выполняются всегда, независимо от непредвиденных событий или исключений, которые могут возникнуть во время выполнения приложения. Опционально он используется с блоком «try / catch» и гарантирует выполнение любого кода, который должен быть выполнен перед выходом из блока «try», независимо от успеха или неудачи при выполнении приложения.
Выполнение блока finally предназначено для высвобождения ресурсов, таких как соединения с базой данных, которые обычно доступны в ограниченных количествах. Благодаря этому механизму удаление ресурсов происходит раньше, чем операция завершения сборщика мусора, тем самым оптимизируя память.
Техопедия объясняет, наконец, блок
Код в блоке finally может использоваться для обработки исключений, как только они возникают, очистки памяти, выделенной в блоке «try», или удаления объектов, содержащих внешние ресурсы (например, дескрипторы файлов), используемых в блоке «try». Блок finally также облегчает выполнение служебных задач, таких как сброс курсора в нормальное состояние до момента возникновения исключения.
Как правило, код в блоке finally выполняется, когда управление выходит из блока try в результате нормального выполнения, в результате выполнения операторов "break", "goto", "continue" или "return" или по причине исключение из оператора try.
Всякий раз, когда в блоке try возникает исключение, управление переходит от строки, вызвавшей исключение, к ближайшему блоку перехвата (обработчику исключений), а затем к блоку finally. Кроме того, когда исключение перебрасывается в блоке catch, управление переходит к блоку finally. Таким образом, код, который следует за строкой, где произошло исключение, будет пропущен.
Исключения не должны быть явно выброшены в блоке finally. Если во время выполнения блока finally возникает исключение, любой код после точки, в которой было сгенерировано исключение, не будет выполнен, а исключение будет распространено на внешний включающий блок try. Если блок finally уже обрабатывает другое исключение, это приводит к прекращению обработки текущего исключения.
Следует позаботиться о том, чтобы явно не перенести выполнение в блок finally или из него, поскольку это недопустимая передача.