checked (Referência de C#)checked (C# Reference)

A palavra-chave checked é usada para habilitar explicitamente a verificação estouro para conversões e operações aritméticas de tipo integral.The checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.

Por padrão, uma expressão que contém somente valores constantes causa um erro do compilador se a expressão produzir um valor fora do intervalo do tipo de destino.By default, an expression that contains only constant values causes a compiler error if the expression produces a value that is outside the range of the destination type. Se a expressão contiver um ou mais valores não constantes, o compilador não detectará o estouro.If the expression contains one or more non-constant values, the compiler does not detect the overflow. Avaliar a expressão atribuída a i2 no exemplo a seguir não causa um erro do compilador.Evaluating the expression assigned to i2 in the following example does not cause a compiler error.

// 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 constantes não são verificados quanto ao estouro em tempo de execução e não geram exceções de estouro.By default, these non-constant expressions are not checked for overflow at run time either, and they do not raise overflow exceptions. O exemplo anterior exibe -2,147,483,639 como a soma de dois números inteiros positivos.The previous example displays -2,147,483,639 as the sum of two positive integers.

A verificação de estouro pode ser habilitada por opções do compilador, configuração do ambiente ou uso da palavra-chave checked.Overflow checking can be enabled by compiler options, environment configuration, or use of the checked keyword. Os exemplos a seguir demonstram como usar uma expressão checked ou um bloco checked para detectar o estouro produzido pela soma anterior no tempo de execução.The following examples demonstrate how to use a checked expression or a checked block to detect the overflow that is produced by the previous sum at run time. Os dois exemplos geram uma exceção de estouro.Both examples raise an overflow exception.

// 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);
}

A palavra-chave unchecked pode ser usada para impedir a verificação de estouro.The unchecked keyword can be used to prevent overflow checking.

ExemploExample

Este exemplo mostra como usar checked para habilitar a verificação de estouro em tempo de execução.This sample shows how to use checked to enable overflow checking at run time.

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#C# language specification

Para obter mais informações, consulte a especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Confira tambémSee also