2010-10-17 3 views
5

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

ответ

13

Да, вам не нужен блок catch. Всегда выполняется блок finally.

Что касается разницы между System.Exception и System.ApplicationException: Exception является базовым классом для всех исключений; ApplicationException следует использовать при возникновении ошибки, не связанной со смертельным исходом. См. MSDN documentation.

Также см. best practices for handling exceptions.

+0

Вы имеете в виду, что после запуска блока finally будет выбрано исключение и программа завершится? (когда нет соответствующего блока catch) – NoviceToDotNet

+0

Ну, да и нет. Исключение будет выбрано, но может быть другой блок try-catch, окружающий вызов этого, и в этом случае попытка try-catch более высокого уровня поймает это исключение. –

+2

Как в стороне, не используйте 'ApplicationException'. Он устарел. Вместо этого используйте соответствующее исключение, полученное из System.Exception (или выведите свой собственный). – mtreit

4

Как уже упоминалось, finally будет работать, даже если нет блока catch. Это поддерживает Java попробуйте, наконец, шаблон (который может быть достигнут с помощью IDisposable и using).

Один исключение (посмотреть, что я там делал?) это когда StackOverflowException брошено в этом случае finally блок will not run (ни Бы catch, если один присутствовали).

Блок finally выполняется после того, как блок try завершает (либо чисто или путем исключения), как и следовало ожидать от его местоположения в коде.

+0

+1 для упоминания, что StackOverflowException часть –

+0

P.S. Мне нравится, как 2 израильтянина, отвечая на этот вопрос, оба изображены с ребенком в рюкзаке. (Вы не можете видеть, что так хорошо в моей картинке, но это то, что это ...);) –

+0

что происходит, это исключение возникает в блоке catch ... все же наконец будет выполнено? – NoviceToDotNet

Смежные вопросы