Compartilhar via


Como: Usar blocos Finally

Quando ocorre uma exceção, a execução para e o controle é dado ao manipulador de exceção mais próximo. Isso geralmente significa que linhas de código que você pretende que sempre sejam chamadas não sejam executadas. Alguns recursos de limpeza, como fechamento de um arquivo, sempre devem ser executados, mesmo se uma exceção for lançada. Para fazer isso, você pode usar um bloco finally. O bloco finally será sempre executado, independentemente se uma exceção for, ou não, lançada.

O exemplo de código a seguir usa um bloco try/catch para capturar uma ArgumentOutOfRangeException. O método Main cria duas matrizes e tenta copiar uma para a outra. A ação gera um ArgumentOutOfRangeException e o erro é escrito no console. O bloco finally é executado independentemente do resultado da ação de cópia.

Exemplo

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();
}

Consulte também

Tarefas

Como: Usar o bloco Try/Catch para capturar exceções

Como: Lançar exceções explicitamente

Como: Criar exceções definida pelo usuário

Outros recursos

Fundamentos da Manipulação de Exceções