Como usar blocos finallyHow to use finally blocks

Quando ocorre uma exceção, a execução é interrompida e o controle é dado ao manipulador de exceção apropriado.When an exception occurs, execution stops and control is given to the appropriate exception handler. Geralmente, isso significa que linhas de código que você espera que sejam executadas são ignoradas.This often means that lines of code you expect to be executed are bypassed. A limpeza de alguns recursos, assim como o fechamento de um arquivo, precisará ser feita mesmo se uma exceção for gerada.Some resource cleanup, such as closing a file, needs to be done even if an exception is thrown. Para fazer isso, você pode usar um bloco finally.To do this, you can use a finally block. Um bloco finally sempre é executado, independentemente de uma exceção ser ou não gerada.A finally block always executes, regardless of whether an exception is thrown.

O exemplo de código a seguir usa um bloco try/catch para capturar uma ArgumentOutOfRangeException.The following code example uses a try/catch block to catch an ArgumentOutOfRangeException. O método Main cria duas matrizes e tenta copiar uma para a outra.The Main method creates two arrays and attempts to copy one to the other. A ação gera um ArgumentOutOfRangeException e o erro é gravado no console.The action generates an ArgumentOutOfRangeException and the error is written to the console. Este bloco finally é executado independentemente resultado da ação de cópia.The finally block executes regardless of the outcome of the copy action.

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

Veja tambémSee also