Checked (C# referência)
O checked palavra-chave é usada para permitir explicitamente o estouro de verificação de tipo integral de operações aritméticas e conversões.
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 eles não levantam 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, que é 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 o estouro de verificação em tempo de execução.
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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Selecionado e desmarcada (C# referência)