Partilhar via


Como usar finalmente blocos

Quando ocorre uma exceção, a execução para e o controle é dado ao manipulador de exceção apropriado. Isso geralmente significa que as linhas de código que você espera que sejam executadas são ignoradas. Alguma limpeza de recursos, como fechar um arquivo, precisa ser feita mesmo se uma exceção for lançada. Para fazer isso, você pode usar um finally bloco. Um finally bloco sempre é executado, independentemente de uma exceção ser lançada.

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

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);
            throw;
        }
        finally
        {
            Console::WriteLine("This statement is always executed.");
        }
    }
};

int main()
{
    ArgumentOutOfRangeExample::Main();
}
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);
            throw;
        }
        finally
        {
            Console.WriteLine("This statement is always executed.");
        }
    }
}
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)
            Throw
        Finally
            Console.WriteLine("This statement is always executed.")
        End Try
    End Sub
End Class

Consulte também