Procedura: utilizzare blocchi Finally

Quando si verifica un'eccezione, l'esecuzione si interrompe e il controllo passa al più vicino gestore eccezioni. Questo comporta spesso la mancata esecuzione di righe di codice che si prevede invece vengano sempre chiamate. È necessario che una certa pulitura delle risorse, quale la chiusura di un file, venga sempre eseguita, anche quando viene generata un'eccezione. A tale scopo è possibile utilizzare un blocco finally. I blocchi finally vengono sempre eseguiti, indipendentemente dal verificarsi di eventuali eccezioni.

Nell'esempio di codice seguente viene utilizzato un blocco try/catch per intercettare un'eccezione ArgumentOutOfRangeException. Il metodo Main crea due matrici e tenta di copiarne una nell'altra. In seguito a questa operazione viene generata un'eccezione ArgumentOutOfRangeException e l'errore viene scritto nella console. Il blocco finally viene eseguito indipendentemente dall'esito dell'operazione di copia.

Esempio

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

Vedere anche

Attività

Procedura: utilizzare il blocco try/catch per l'intercettazione di eccezioni

Procedura: generare eccezioni in modo esplicito

Procedura: creare eccezioni definite dall'utente

Altre risorse

Nozioni fondamentali sulla gestione delle eccezioni