Compartir a través de


Cómo: Utilizar bloques Finally

Cuando se produce una excepción, se detiene la ejecución y da el control al controlador de excepciones más cercano. A menudo, esto significa que no se ejecutan líneas de código que se espera que se llamen siempre. Siempre se debe ejecutar cierta limpieza de recursos, como el cierre de un archivo, incluso si se produce una excepción. Para lograr esto, se puede usar un bloque Finally. Los bloques Finally se ejecutan siempre, independientemente de si se produce una excepción o no.

En el siguiente ejemplo de código se utiliza un bloque try/catch para detectar una excepción ArgumentOutOfRangeException. El método Main crea dos matrices e intenta copiar una en la otra. La acción genera una ArgumentOutOfRangeException y el error se escribe en la consola. El bloque Finally se ejecuta, sea cual sea el resultado de la acción de copia.

Ejemplo

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

Vea también

Tareas

Cómo: Utilizar el bloque Try/Catch para detectar excepciones

Cómo: Iniciar excepciones explícitamente

Cómo: Crear excepciones definidas por el usuario

Otros recursos

Fundamentos del control de excepciones