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