Exceções e manipulação de exceções (Guia de Programação em C#)Exceptions and Exception Handling (C# Programming Guide)

Os recursos de manipulação de exceção da linguagem C# ajudam você a lidar com quaisquer situações excepcionais ou inesperadas que ocorram quando um programa for executado.The C# language's exception handling features help you deal with any unexpected or exceptional situations that occur when a program is running. A manipulação de exceção usa as palavras-chave try, catch e finally para executar ações que podem não ser bem-sucedidas, lidar com falhas quando decidir se é razoável fazer isso e limpar recursos posteriormente.Exception handling uses the try, catch, and finally keywords to try actions that may not succeed, to handle failures when you decide that it is reasonable to do so, and to clean up resources afterward. As exceções podem ser geradas pelo CLR (Common Language Runtime), pelo .NET Framework ou por quaisquer bibliotecas de terceiros, ou pelo código do aplicativo.Exceptions can be generated by the common language runtime (CLR), by the .NET Framework or any third-party libraries, or by application code. As exceções são criadas usando a palavra-chave throw.Exceptions are created by using the throw keyword.

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.In many cases, an exception may be thrown not by a method that your code has called directly, but by another method further down in the call stack. Quando isso acontecer, o CLR desenrolará a pilha, procurando por um método com um bloco catch para o tipo de exceção específico e ele será executado primeiro o bloco catch que encontrar.When this happens, the CLR will unwind the stack, looking for a method with a catch block for the specific exception type, and it will execute the first such catch block that if finds. Se ele não encontrar um bloco catch apropriado na pilha de chamadas, ele encerrará o processo e exibirá uma mensagem para o usuário.If it finds no appropriate catch block anywhere in the call stack, it will terminate the process and display a message to the user.

Neste exemplo, um método testa a divisão por zero e captura o erro.In this example, a method tests for division by zero and catches the error. Sem a manipulação de exceção, esse programa encerraria com um DivideByZeroException não resolvido.Without the exception handling, this program would terminate with a DivideByZeroException was unhandled error.

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 sobre exceçõesExceptions Overview

As exceções têm as seguintes propriedades:Exceptions have the following properties:

  • As exceções são tipos que derivam, por fim, de System.Exception.Exceptions are types that all ultimately derive from System.Exception.

  • Use um bloco try nas instruções que podem lançar exceções.Use a try block around the statements that might throw exceptions.

  • Quando ocorre uma exceção no bloco try, o fluxo de controle vai para o primeiro manipulador de exceção associada que está presente em qualquer lugar na pilha de chamadas.Once an exception occurs in the try block, the flow of control jumps to the first associated exception handler that is present anywhere in the call stack. No C#, a palavra-chave catch é usada para definir um manipulador de exceção.In C#, the catch keyword is used to define an exception handler.

  • Se nenhum manipulador de exceção para uma determinada exceção estiver presente, o programa interromperá a execução com uma mensagem de erro.If no exception handler for a given exception is present, the program stops executing with an error message.

  • Não capture uma exceção a menos que você possa manipulá-la e deixar o aplicativo em um estado conhecido.Do not catch an exception unless you can handle it and leave the application in a known state. Se você capturar System.Exception, relance-o usando a palavra-chave throw no final do bloco catch.If you catch System.Exception, rethrow it using the throw keyword at the end of the catch block.

  • Se um bloco 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.If a catch block defines an exception variable, you can use it to obtain more information about the type of exception that occurred.

  • As exceções podem ser geradas explicitamente por um programa usando a palavra-chave throw.Exceptions can be explicitly generated by a program by using the throw keyword.

  • 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.Exception objects contain detailed information about the error, such as the state of the call stack and a text description of the error.

  • O código em um bloco finally será executado mesmo se uma exceção for lançada.Code in a finally block is executed even if an exception is thrown. Use um bloco finally para liberar recursos, por exemplo, para fechar todos os fluxos ou arquivos que foram abertos no bloco try.Use a finally block to release resources, for example to close any streams or files that were opened in the try block.

  • As exceções gerenciadas no .NET Framework são implementadas sobre o mecanismo de manipulação de exceções estruturadas do Win32.Managed exceptions in the .NET Framework are implemented on top of the Win32 structured exception handling mechanism. Para obter mais informações, consulte Manipulação de exceções estruturadas (C/C++) e Curso rápido sobre a manipulação de exceções estruturadas do Win32.For more information, see Structured Exception Handling (C/C++) and A Crash Course on the Depths of Win32 Structured Exception Handling.

Consulte os tópicos a seguir para obter mais informações sobre exceções e manipulação de exceção:See the following topics for more information about exceptions and exception handling:

Especificação da Linguagem C#C# Language Specification

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émSee Also

SystemException
Guia de Programação em C#C# Programming Guide
Palavras-chave do C#C# Keywords
throwthrow
try-catchtry-catch
try-finallytry-finally
try-catch-finallytry-catch-finally
ExceçõesExceptions