Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os recursos de tratamento de exceção da linguagem C# ajudam você a lidar com situações inesperadas ou excepcionais que ocorrem quando um programa está em execução. O tratamento de exceções usa as palavras-chave try
, catch
e finally
para tentar ações que podem não ter êxito, lidar com falhas quando você decide que é razoável fazê-lo e limpar os recursos posteriormente. As exceções podem ser geradas pelo CLR (Common Language Runtime), por bibliotecas .NET ou 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 gerada 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 desenrola a pilha, procurando um método que tenha um bloco catch
para o tipo de exceção específico e executará o primeiro bloco catch
desse tipo encontrado. Se 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 captura o erro. Sem a manipulação de exceções, esse programa terminaria com um erro de exceção não tratada DivideByZeroException.
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 de exceções
As exceções têm as seguintes propriedades:
- Exceções são tipos que, em última análise, derivam de
System.Exception
. - Use um bloco
try
nas instruções que podem lançar exceções. - Depois que ocorre uma exceção no bloco
try
, o fluxo de controle salta para o primeiro manipulador de exceção associado presente ao longo da pilha de chamadas. Em C#, acatch
palavra-chave é usada para definir um manipulador de exceção. - Se nenhum manipulador de exceção para uma determinada exceção estiver presente, o programa interromperá a execução com uma mensagem de erro.
- Não capture uma exceção, a menos que você possa manipulá-la e deixar o aplicativo em um estado conhecido. Se você capturar
System.Exception
, relance-o usando a palavra-chavethrow
no final do blococatch
. - Se um
catch
bloco definir uma variável de exceção, você poderá usá-la 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. - 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 gerada. Use umfinally
bloco para liberar recursos, por exemplo, para fechar todos os fluxos ou arquivos que foram abertos notry
bloco. - As exceções gerenciadas no .NET são implementadas sobre o mecanismo de tratamento de exceção estruturado do Win32. Para obter mais informações, consulte Tratamento Estruturado de Exceções (C/C++) e Um Curso Intensivo sobre as Profundezas do Tratamento de Exceções Estruturadas do Win32.
Especificação da linguagem C#
Para obter mais informações, consulte Exceções na Especificação da Linguagem C#. A especificação de idioma é a fonte definitiva para a sintaxe e o uso de C#.