Share via


checked (Referência de C#)

O checked palavra-chave é usada para permitir explicitamente a verificação de tipo integral operações aritméticas e conversões de estouro.

Por padrão, uma expressão que contém somente valores constantes causa um erro do compilador se a expressão produz um valor que está fora do intervalo do tipo de destino. Se a expressão contém um ou mais valores não constante, o compilador não detecta o estouro. Avaliar a expressão atribuída a i2 no exemplo a seguir não causa um erro do compilador.

// The following example causes compiler error CS0220 because 2147483647 
// is the maximum value for integers.  
//int i1 = 2147483647 + 10; 

// The following example, which includes variable ten, does not cause 
// a compiler error. 
int ten = 10;
int i2 = 2147483647 + ten;

// By default, the overflow in the previous statement also does 
// not cause a run-time exception. The following line displays  
// -2,147,483,639 as the sum of 2,147,483,647 and 10.
Console.WriteLine(i2);

Por padrão, essas expressões não constante não são verificados para estouro em tempo de execução, e elas não geram exceções de estouro. O exemplo anterior exibe-2,147,483,639 como a soma de dois inteiros positivos.

Verificação de estouro pode ser habilitado por opções do compilador, a configuração do ambiente ou o uso da checked palavra-chave. Os exemplos a seguir demonstram como usar um checked expressão ou um checked bloco para detectar o estouro produzido pela soma anterior no tempo de execução. Ambos os exemplos elevar uma exceção de estouro.

// If the previous sum is attempted in a checked environment, an  
// OverflowException error is raised. 

// Checked expression.
Console.WriteLine(checked(2147483647 + ten));

// Checked block. 
checked
{
    int i3 = 2147483647 + ten;
    Console.WriteLine(i3);
}

O não verificado palavra-chave pode ser usada para evitar a verificação de estouro.

Exemplo

Este exemplo mostra como usar checked para habilitar a verificação em tempo de execução de estouro.

class OverFlowTest
{
    // Set maxIntValue to the maximum value for integers. 
    static int maxIntValue = 2147483647;

    // Using a checked expression. 
    static int CheckedMethod()
    {
        int z = 0;
        try
        {
            // The following line raises an exception because it is checked.
            z = checked(maxIntValue + 10);
        }
        catch (System.OverflowException e)
        {
            // The following line displays information about the error.
            Console.WriteLine("CHECKED and CAUGHT:  " + e.ToString());
        }
        // The value of z is still 0. 
        return z;
    }

    // Using an unchecked expression. 
    static int UncheckedMethod()
    {
        int z = 0;
        try
        {
            // The following calculation is unchecked and will not  
            // raise an exception.
            z = maxIntValue + 10;
        }
        catch (System.OverflowException e)
        {
            // The following line will not be executed.
            Console.WriteLine("UNCHECKED and CAUGHT:  " + e.ToString());
        }
        // Because of the undetected overflow, the sum of 2147483647 + 10 is  
        // returned as -2147483639. 
        return z;
    }

    static void Main()
    {
        Console.WriteLine("\nCHECKED output value is: {0}",
                          CheckedMethod());
        Console.WriteLine("UNCHECKED output value is: {0}",
                          UncheckedMethod());
    }
    /*
   Output:
   CHECKED and CAUGHT:  System.OverflowException: Arithmetic operation resulted
   in an overflow.
      at ConsoleApplication1.OverFlowTest.CheckedMethod() 

   CHECKED output value is: 0
   UNCHECKED output value is: -2147483639
 */
}

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#

Contexto verificado e não verificado (Referência de C#)

unchecked (Referência de C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#