Практическое руководство. Использование блоков Finally

При возникновении исключения выполнение процессов останавливается, и управление передается ближайшему обработчику исключений. Часто это означает, что не выполняются те строки кода, которые, как предполагается, всегда вызываются. Очистка некоторых ресурсов, такая как закрытие файла, должна выполняться всегда, даже если создается исключение. Для этого можно использовать блок finally. Блок finally выполняется всегда, вне зависимости от возникновения исключения.

В следующем примере кода блок try/catch используется для перехвата ArgumentOutOfRangeException. Метод Main создает два массива и пытается скопировать один из них в другой. Это действие инициирует исключение ArgumentOutOfRangeException, и на консоль выводится сообщение об ошибке. Блок finally выполняется вне зависимости от результата операции копирования.

Пример

Imports System

Class ArgumentOutOfRangeExample
    Public Shared Sub Main()
        Dim array1() As Integer = {0, 0}
        Dim array2() As Integer = {0, 0}

        Try
            Array.Copy(array1, array2 , -1)
        Catch e As ArgumentOutOfRangeException
            Console.WriteLine("Error: {0}", e)
        Finally
            Console.WriteLine("This statement is always executed.")
        End Try
    End Sub
End Class
using System;

class ArgumentOutOfRangeExample
{
    public static void Main()
    {
        int[] array1 = {0, 0};
        int[] array2 = {0, 0};

        try
        {
            Array.Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.WriteLine("Error: {0}", e);
        }
        finally
        {
            Console.WriteLine("This statement is always executed.");
        }
    }
}
using namespace System;

ref class ArgumentOutOfRangeExample
{
public:
    static void Main()
    {
        array<int>^ array1 = {0, 0};
        array<int>^ array2 = {0, 0};

        try
        {
            Array::Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException^ e)
        {
            Console::WriteLine("Error: {0}", e);
        }
        finally
        {
            Console::WriteLine("This statement is always executed.");
        }
    }
};

int main()
{
    ArgumentOutOfRangeExample::Main();
}

См. также

Задачи

Практическое руководство. Использование пробного блока и блока перехвата для перехвата исключений

Практическое руководство. Явное создание исключения

Практическое руководство. Создание пользовательских исключений

Другие ресурсы

Основы обработки исключений