Come usare i blocchi finallyHow to use finally blocks

Quando si verifica un'eccezione, l'esecuzione viene arrestata e il controllo viene assegnato al gestore di eccezioni appropriato.When an exception occurs, execution stops and control is given to the appropriate exception handler. Spesso questo significa che le righe di codice che si prevede di eseguire vengono ignorate.This often means that lines of code you expect to be executed are bypassed. La pulizia di alcune risorse, ad esempio la chiusura di un file, deve essere eseguita anche se viene generata un'eccezione.Some resource cleanup, such as closing a file, needs to be done even if an exception is thrown. A tale scopo è possibile usare un blocco finally.To do this, you can use a finally block. Un blocco finally viene sempre eseguito, indipendentemente dalla generazione di un'eccezione.A finally block always executes, regardless of whether an exception is thrown.

L'esempio di codice seguente usa un blocco try/catch per rilevare ArgumentOutOfRangeException.The following code example uses a try/catch block to catch an ArgumentOutOfRangeException. Il metodo Main crea due matrici e tenta di copiarle una sull'altra.The Main method creates two arrays and attempts to copy one to the other. L'azione genera un'eccezione ArgumentOutOfRangeException e l'errore viene scritto nella console.The action generates an ArgumentOutOfRangeException and the error is written to the console. Il blocco finally viene eseguito indipendentemente dal risultato dell'azione di copia.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

Vedere ancheSee also