Все ще прокручуєте вниз? Ось вам!
Це питання дало мені важкий час назад.
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
що буде надруковано у вищезазначеному сценарії? Так, правильно вгадав:
напр. повідомлення - яким би воно не було (можливо, спроба ділення на нуль)
Нарешті блокувати
Після нарешті
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
Що це за друк? Нічого! Він видає помилку, оскільки блок catch викликав помилку.
У хорошій структурі програмування ваші винятки будуть спрямовані, в тому сенсі, що цей код буде оброблятися з іншого рівня. Для стимулювання такого випадку я вкладу спробувати цей код.
try
{
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block")
}
console.writeline("After finally");
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
У цьому випадку результат буде:
- Нарешті блокувати
- напр. повідомлення - яким би воно не було.
Зрозуміло, що коли ви ловите виняток і перекидаєте його знову на інші шари (функціонування), код після кидка не виконується. Це діє подібно до того, як працює повернення всередині функції.
Тепер ви знаєте, чому б не закрити свої ресурси на кодах після блоку catch, помістіть їх у блок нарешті.