Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os recursos de tratamento de exceções da linguagem C# ajudam você a lidar com quaisquer situações inesperadas ou excecionais que ocorram quando um programa está em execução. O tratamento de exceções usa as try
palavras-chave , catch
e finally
para tentar ações que podem não ter êxito, para lidar com falhas quando você decide que é razoável fazê-lo e para limpar recursos depois. As exceções podem ser geradas pelo Common Language Runtime (CLR), pelo .NET ou bibliotecas de terceiros ou pelo código do aplicativo. As exceções são criadas usando a throw
palavra-chave.
Em muitos casos, uma exceção pode ser lançada não por um método que seu código chamou diretamente, mas por outro método mais abaixo na pilha de chamadas. Quando uma exceção é lançada, o CLR desenrolará a pilha, procurando um bloco catch
para o tipo de exceção específico e executará o primeiro bloco catch
que encontrar. Se ele não encontrar nenhum bloco apropriado catch
em qualquer lugar na pilha de chamadas, ele encerrará o processo e exibirá uma mensagem para o usuário.
Neste exemplo, um método testa a divisão por zero e deteta o erro. Sem o tratamento de exceção, este programa terminaria com um erro DivideByZeroException não foi tratado .
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Visão geral das exceções
As exceções têm as seguintes propriedades:
- As exceções são tipos que, em última análise, derivam de
System.Exception
. - Use um
try
bloco em torno das instruções que podem gerar exceções. - Quando uma exceção ocorre no
try
bloco, o fluxo de controle salta para o primeiro manipulador de exceção associado que está presente em qualquer lugar na pilha de chamadas. Em C#, acatch
palavra-chave é usada para definir um manipulador de exceções. - Se nenhum manipulador de exceção para uma determinada exceção estiver presente, o programa para de ser executado com uma mensagem de erro.
- Não pegue uma exceção, a menos que você possa lidar com ela e deixar o aplicativo em um estado conhecido. Se apanhares
System.Exception
, lança-o novamente no final do blocothrow
usando a palavra-chavecatch
. - Se um
catch
bloco definir uma variável de exceção, você poderá usá-lo para obter mais informações sobre o tipo de exceção que ocorreu. - As exceções podem ser geradas explicitamente por um programa usando a
throw
palavra-chave. - Os objetos de exceção contêm informações detalhadas sobre o erro, como o estado da pilha de chamadas e uma descrição de texto do erro.
- O código em um
finally
bloco é executado independentemente de uma exceção ser lançada. Use umfinally
bloco para liberar recursos, por exemplo, para fechar quaisquer fluxos ou arquivos que foram abertos notry
bloco. - As exceções gerenciadas no .NET são implementadas sobre o mecanismo de tratamento de exceções estruturadas do Win32. Para obter mais informações, consulte Structured Exception Handling (C/C++) e A Crash Course on the Depths of Win32 Structured Exception Handling.
Especificação da linguagem C#
Para obter mais informações, consulte Exceções na especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#.