Цитата из MSDN
Обычное использование catch и, наконец, вместе заключается в получении и использовании ресурсов в блоке try, работе с исключительными обстоятельствами в блоке catch,и высвободите ресурсы в блоке finally.
Итак, чтобы сделать его еще более понятным, подумайте о коде, который вы хотите запустить, в 99% случаев он работает отлично, но где-то вво фрагменте может произойти ошибка, вы не знаете, где и какие ресурсы стоят дорого.
Чтобы быть на 100% уверенными в том, что ресурсы утилизированы, вы используете блок finally, однако вам нужноточно указать, что в 1% случаев возникает ошибка, поэтому вам может потребоваться настроить ведение журнала в секции «catch-ing».
Это очень распространенный сценарий.
Edit - практический пример
Здесь есть несколько хороших примеров: Транзакции SQL с классом SqlTransaction .Это только один из многих способов использовать Try, Catch & Наконец, и он демонстрирует это очень хорошо, даже если using(var x = new SqlTranscation)
может быть эффективен несколько раз.
Итак, пошло.
var connection = new SqlConnection();
var command = new SqlCommand();
var transaction = connection.BeginTransaction();
command.Connection = connection;
command.Transaction = transaction;
А вот и более интересные детали
///
/// Try to drop a database
///
try
{
connection.Open();
command.CommandText = "drop database Nothwind";
command.ExecuteNonQuery();
}
Итак, давайте представим, что вышеперечисленное не работает по какой-то причине, и выдается исключение
///
/// Due to insufficient priviligies we couldn't do it, an exception was thrown
///
catch(Exception ex)
{
transaction.Rollback();
}
Транзакция будет отменена!Помните, что изменения, внесенные вами в объекты внутри try / catch, не будут отменены, даже если вы вложите их в использование!
///
/// Clean up the resources
///
finally
{
connection.Close();
transaction = null;
command = null;
connection = null;
}
Теперь ресурсы очищены!