Como usar finalmente blocos
Quando ocorre uma exceção, a execução para e o controle é dado ao manipulador de exceção apropriado. Isso geralmente significa que as linhas de código que você espera que sejam executadas são ignoradas. Alguma limpeza de recursos, como fechar um arquivo, precisa ser feita mesmo se uma exceção for lançada. Para fazer isso, você pode usar um finally
bloco. Um finally
bloco sempre é executado, independentemente de uma exceção ser lançada.
O exemplo de código a seguir usa um try
/catch
bloco para capturar um ArgumentOutOfRangeExceptionarquivo . O Main
método cria duas matrizes e tenta copiar uma para a outra. A ação gera um ArgumentOutOfRangeException porque length
é especificado como -1 e o erro é gravado no console. O finally
bloco é executado independentemente do resultado da ação de cópia.
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