Checked e Unchecked
- Checked e Unchecked
Exemplo
Este exemplo mostra como checked pode ser usado para lançar uma exceção quando ocorre um estouro aritmético, enquanto unchecked ignora o estouro.
using System;
class Program
{
static void Main()
{
// Exemplo de uso de checked
try
{
int maxInt = int.MaxValue;
Console.WriteLine("Valor máximo de int: " + maxInt);
// Esta operação irá causar um estouro e lançar uma exceção
int resultChecked = checked(maxInt + 1);
Console.WriteLine("Resultado com checked: " + resultChecked);
}
catch (OverflowException e)
{
Console.WriteLine("Exceção capturada com checked: " + e.Message);
}
// Exemplo de uso de unchecked
try
{
int maxInt = int.MaxValue;
Console.WriteLine("Valor máximo de int: " + maxInt);
// Esta operação irá causar um estouro, mas não lançará uma exceção
int resultUnchecked = unchecked(maxInt + 1);
Console.WriteLine("Resultado com unchecked: " + resultUnchecked);
}
catch (OverflowException e)
{
// Não será capturada nenhuma exceção aqui
Console.WriteLine("Exceção capturada com unchecked: " + e.Message);
}
// Exemplo adicional de bloco checked
try
{
int a = 2147483640;
int b = 10;
checked
{
// Esta operação irá causar um estouro e lançar uma exceção
int result = a + b;
Console.WriteLine("Resultado dentro do bloco checked: " + result);
}
}
catch (OverflowException e)
{
Console.WriteLine("Exceção capturada no bloco checked: " + e.Message);
}
// Exemplo adicional de bloco unchecked
{
int a = 2147483640;
int b = 10;
unchecked
{
// Esta operação irá causar um estouro, mas não lançará uma exceção
int result = a + b;
Console.WriteLine("Resultado dentro do bloco unchecked: " + result);
}
}
}
}
Explicação
-
checked: Utilizado para verificar estouro em operações aritméticas. Se um estouro ocorrer, umaOverflowExceptioné lançada. No exemplo,checked(maxInt + 1)lança uma exceção porquemaxInté o valor máximo que umintpode ter, e adicionar 1 a ele causa um estouro. -
unchecked: Utilizado para ignorar estouro em operações aritméticas. Se um estouro ocorrer, ele é ignorado e o valor resultante é truncado. No exemplo,unchecked(maxInt + 1)resulta em um valor truncado sem lançar uma exceção. -
Blocos
checkedeunchecked: Além do uso em expressões, você também pode usarcheckedeuncheckedpara definir blocos de código onde todas as operações aritméticas dentro do bloco são verificadas ou ignoradas para estouros, respectivamente.
Este exemplo ilustra como controlar a verificação de estouro em C# para evitar exceções ou lidar com cálculos aritméticos que podem exceder os limites dos tipos numéricos.