Share via


Exceções e manipulação de exceções (Guia de Programação em C#)

Os recursos de manipulação de exceção de linguagem C# ajudam você a tratar todas as situações inesperadas ou excepcionais que ocorrem quando um programa está sendo executado. Manipulação de exceção usa try, catch, e palavra-chave de finally para tentar ações que podem não obterá êxito, manipular falhas quando você decidir que é razoável fazer isso, e para limpar recursos mais tarde. Exceções podem ser geradas pelo common language runtime (CLR), pelo .NET Framework ou por todas as bibliotecas de terceiros, ou código de aplicativo. As exceções são criadas usando a palavra-chave de throw .

Em muitos casos, pode ser apresentada uma exceção não por um método que seu código pode chamar diretamente, mas por outra caneta adicional do método na pilha de chamadas. Quando isso acontece, o CLR desenrolará a pilha, procurando por um método com um bloco de catch para o tipo de exceção específica, o primeiro e executar um bloco de catch que se localiza. Se não encontrar nenhum bloco apropriado de catch em qualquer lugar na pilha de chamadas, terminará o processo e exibirá uma mensagem para o usuário.

Em esse exemplo, em testes de um método para divisão por zero e em capturas o erro. Sem tratamento de exceção, o programa finalizaria com um erro de DivideByZeroException não foi manipulado .

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change the values to see 
        // exception handling behavior. 
        double a = 98, b = 0;
        double result = 0;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Visão Geral das Exceções

Exceções têm as seguintes propriedades:

  • As exceções são os tipos que todos derivam de finalmente System.Exception.

  • Use um bloco de try em torno de instruções que podem lançar exceções.

  • Uma vez que uma exceção ocorre no bloco de try , o fluxo de controle vai para o primeiro manipulador associado de exceção que está presente em qualquer lugar na pilha de chamadas. Em C#, a palavra-chave de catch é usado para definir um manipulador de exceção.

  • Se nenhum manipulador de exceção para uma determinada exceção estiverem presentes, o programa pára de reproduzir com uma mensagem de erro.

  • Não capturar uma exceção a menos que você pode manipular e para permitir que o aplicativo em um estado conhecido. Se você detectar System.Exception, relançar ele usando a palavra-chave de throw no final do bloco de catch .

  • Se um bloco de catch define uma variável de exceção, você pode usá-lo para obter mais informações sobre o tipo de exceção que ocorreu.

  • Exceções podem ser explicitamente geradas por um programa usando a palavra-chave de throw .

  • Os objetos de exceção contêm informações detalhadas sobre o erro, como o estado da pilha de chamadas e uma descrição do texto de erro.

  • O código em um bloco de finally é executado se uma exceção é lançada. Use um bloco de finally para liberar recursos, por exemplo para fechar todos os fluxos ou arquivos que estão abertos no bloco de try .

  • Exceções gerenciados no.NET Framework são implementadas sobre o Win32 mecanismo de manipulação estruturada de exceções. Para obter mais informações, consulte Tratamento de exceções estruturado (C/C++) e Um traço intensivo em profundidades Win32 estruturou manipulação de exceção.

Seções relacionadas

Consulte os seguintes tópicos para obter mais informações sobre as exceções e manipulação de exceção:

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Palavras-chave C#

throw (Referência de C#)

try-catch (Referência de C#)

try-finally (Referência de C#)

try-catch-finally (Referência de C#)

SystemException

Conceitos

Guia de Programação em C#

Hierarquia de exceções

Outros recursos

Manipulando e lançando exceções

Escrevendo código confiável .NET

Minidumps para exceções específicas