Udostępnij za pośrednictwem


Jak używać bloków w końcu

W przypadku wystąpienia wyjątku wykonanie zatrzymuje się, a kontrolka jest podawana odpowiedniemu programowi obsługi wyjątków. Często oznacza to, że wiersze kodu, które mają zostać wykonane, są pomijane. Niektóre oczyszczanie zasobów, takie jak zamykanie pliku, należy wykonać nawet wtedy, gdy zostanie zgłoszony wyjątek. W tym celu można użyć finally bloku. Blok finally zawsze jest wykonywany, niezależnie od tego, czy jest zgłaszany wyjątek.

Poniższy przykład kodu używa try/catch bloku do przechwycenia elementu .ArgumentOutOfRangeException Metoda Main tworzy dwie tablice i próbuje skopiować jedną do drugiej. Akcja generuje element ArgumentOutOfRangeException , ponieważ length jest określony jako -1, a błąd jest zapisywany w konsoli. Blok finally jest wykonywany niezależnie od wyniku akcji kopiowania.

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

Zobacz też