Я думаю, что, по большей части, изучая C хорошая идея, неважно, к какой арене Вы входите, по крайней мере, для приобретения навыка внутренних работ разработки программного обеспечения перед использованием предварительно упакованных товаров тот путь, если что-то идет не так, как надо, у Вас есть лучший шанс понимания внутренних работ. Существует много дискуссии об этом на Так, и это - довольно субъективный вопрос, но в целом Вы будете по сути использовать C в своем коде Objective C, таким образом, я предположу, что это действительно ваше дело. Я - земля вид человека, но иногда он может помешать, и я знаю несколько умных людей, которые проложили себе путь от вершины вниз, я думаю, что важная часть - то, что Вы добираетесь до понимания внутренних работ, поскольку он установит Ваши возможности кроме тех, кто не делает, а также увеличивает Ваши возможности.
Итак, мой простой вопрос: в случае исключения достигается ли блок finally, даже если до этого было выброшено несколько строк?
Да. Наконец
блок всегда 1) выполняется и существует именно для очистки. В своем коде удалите блок Catch
, он ничего не делает. Хуже того, это фактически уничтожает трассировку стека, потому что вы не генерируете повторно исходное исключение, а генерируете новое.
Если вам действительно нужен блок Catch
, который затем повторно генерирует исключение, используйте следующее:
Catch e As XyzException
' … do some stuff. '
Throw
End Try
1) : Caveat emptor: есть некоторые исключения, такие как StackOverflowException
(насколько подходит…), которые требуют особого внимания и могут не вызывать Наконец
блок.
Нет, запуск НЕ гарантируется. Есть определенные исключения, например StockOverflowException и OutOfMemoryException, где выполнение блока finally не гарантируется.
Практически во всех случаях объект finally будет выполняться в блоке Try / Catch (заметные исключения, в том числе при возникновении StackOverflowException или OutOfMemoryException). Мне любопытно, почему вы не попробовали это на себе. Ценный способ узнать что-то - это на самом деле испытать их на себе - в конце концов, вы можете в конечном итоге принять неправильный или вводящий в заблуждение ответ, и с этого момента вы будете работать под этой ложью.
ПРИМЕЧАНИЕ. Метод System.Environment.FastFail немедленно уничтожает текущий процесс / поток без выполнения разделов finally.
Да, это так, наконец, выполняется в любом случае. (есть только несколько исключений - Response.Redirect и некоторые случаи с многопоточностью)