try-finally (Справочник по C#)
finally блок полезен для очистки все ресурсы, выбранные в Try блок, и для выполнения любой код, который должен выполняться даже при возникновении исключения в try блок.Обычно выписки a finally блок выполняется, когда элемент управления отображается, a try выписка, происходит ли переключение элемента управления в результате нормального выполнения выполнения a break" continue" gotoили return оператор или распространения исключения из try выписка.
В рамках обработки исключений, связанное finally гарантированно выполняться блок.Однако если необработанные исключения, то выполнение finally блок зависит от того, как исключение активировано завершающей операции.Это, в свою очередь, зависит от того, как на компьютере установки.Дополнительные сведения см. в разделе Необработанное исключение при обработке среды CLR.
Обычно, когда необработанное исключение завершает приложение, ли finally автоматически не важен.Однако если имеется выписки в выражении finally отключение которая должна быть запущена, даже в этой ситуации одно решение добавить a catch блок в try-finally выписка.Кроме того, можно перехватить исключение, которое может создаваться в try блок a try-finally выписка выше вверх по стеку вызовов.То есть можно перехватить исключение в методе, который вызывает метод, содержащий try-finally оператор или в методе, который вызывает этот метод или в любом методе в стеке вызова.Если исключение не перехватывается, то выполнение finally отключите, зависит от того, выбирает ли операционная система, чтобы активировать исключение операцию очистки.
Пример
В следующем примере недопустимый оператор преобразования приводит к a System.InvalidCastException исключение.Необработанное исключение.
public class ThrowTestA
{
static void Main()
{
int i = 123;
string s = "Some string";
object obj = s;
try
{
// Invalid conversion; obj contains a string, not a numeric type.
i = (int)obj;
// The following statement is not run.
Console.WriteLine("WriteLine at the end of the try block.");
}
finally
{
// To run the program in Visual Studio, type CTRL+F5. Then
// click Cancel in the error dialog.
Console.WriteLine("\nExecution of the finally block after an unhandled\n" +
"error depends on how the exception unwind operation is triggered.");
Console.WriteLine("i = {0}", i);
}
}
// Output:
// Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
//
// Execution of the finally block after an unhandled
// error depends on how the exception unwind operation is triggered.
// i = 123
}
В следующем примере исключение из TryCast метод уловлен в методе дальней вверх по стеку вызовов.
public class ThrowTestB
{
static void Main()
{
try
{
// TryCast produces an unhandled exception.
TryCast();
}
catch (Exception ex)
{
// Catch the exception that is unhandled in TryCast.
Console.WriteLine
("Catching the {0} exception triggers the finally block.",
ex.GetType());
// Restore the original unhandled exception. You might not
// know what exception to expect, or how to handle it, so pass
// it on.
throw;
}
}
public static void TryCast()
{
int i = 123;
string s = "Some string";
object obj = s;
try
{
// Invalid conversion; obj contains a string, not a numeric type.
i = (int)obj;
// The following statement is not run.
Console.WriteLine("WriteLine at the end of the try block.");
}
finally
{
// Report that the finally block is run, and show that the value of
// i has not been changed.
Console.WriteLine("\nIn the finally block in TryCast, i = {0}.\n", i);
}
}
// Output:
// In the finally block in TryCast, i = 123.
// Catching the System.InvalidCastException exception triggers the finally block.
// Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
}
Дополнительные сведения о finallyсм. попытк-CATCH-окончательн.
В c# также содержит использование выписку, которая обеспечивает удобный синтаксис для функций, как a try-finally выписка.
Спецификация языка C#
Дополнительные сведения см в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
См. также
Задачи
Практическое руководство. Явное создание исключения
Ссылки
попробуйте, перехватывайте и вызывайте выписки (C++)
Операторы обработки исключений (Справочник по C#)
Основные понятия
Руководство по программированию на C#