Gewusst wie: Verwenden von Finally-Blöcken

Beim Auftreten einer Ausnahme wird die Ausführung beendet und die Kontrolle an den nächsten Ausnahmehandler übergeben. Häufig werden dadurch Codezeilen, die sonst immer aufgerufen werden, nicht ausgeführt. Einige Aufgaben zur Systembereinigung, wie z. B. Schließen einer Datei, müssen immer ausgeführt werden, selbst wenn eine Ausnahme ausgelöst wurde. Dies kann durch Verwenden eines finally-Blocks erreicht werden. Ein finally-Block wird immer ausgeführt, unabhängig vom Auslösen einer Ausnahme.

Im folgenden Beispielcode wird ein try/catch-Block verwendet, um eine ArgumentOutOfRangeException abzufangen. Durch die Main-Methode werden zwei Arrays erstellt, und es wird der Versuch unternommen, ein Array in das andere zu kopieren. Die Aktion generiert eine ArgumentOutOfRangeException-Ausnahme. Der Fehler wird auf der Konsole ausgegeben. Der finally-Block wird unabhängig vom Ausgang des Kopiervorgangs ausgeführt.

Beispiel

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

Siehe auch

Aufgaben

Gewusst wie: Verwenden des Try-Catch-Blocks zum Abfangen von Ausnahmen

Gewusst wie: Explizites Auslösen von Ausnahmen

Gewusst wie: Erstellen benutzerdefinierter Ausnahmen

Weitere Ressourcen

Grundlagen der Ausnahmebehandlung