Végül blokkok használata
Kivétel esetén a végrehajtás leáll, és a rendszer a megfelelő kivételkezelőnek adja meg a vezérlést. Ez gyakran azt jelenti, hogy a végrehajtásra váró kódsorokat a rendszer megkerüli. Néhány erőforrás-törlést, például egy fájl bezárását akkor is el kell végezni, ha kivételt jeleznek. Ehhez használhat blokkot finally
. A finally
blokkok mindig végrehajtásra kerülnek, függetlenül attól, hogy a rendszer kivételt ad-e.
Az alábbi kódpéldában egy try
/catch
blokkot használ egy .ArgumentOutOfRangeException A Main
metódus két tömböt hoz létre, és megpróbálja átmásolni az egyiket a másikba. A művelet létrehoz egy ArgumentOutOfRangeException -1-ként megadott hibát length
, és a hiba a konzolra lesz írva. A finally
blokk a másolási művelet eredményétől függetlenül fut.
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