martes, 17 de julio de 2007

Checkey UnChecked

¿Qué pasa si definimos una variable, por ejemplo, byte y la desbordamos? No contesten...la hecatombe? no, no pasa nada, funciona como un buffer circular, o sea vuelve a contar desde cero. Bueno, está bien, pero si queremos evitar esto y en su lugar lanzar un linda excepción porque ese comportamiento perjudica nuestra lógica de negocios, bueno, para eso existe checked. Probemos este código

private void Test()

{

byte b = new byte();

Console.WriteLine(byte.MaxValue);

for (int i = 0; i <300;i++

{

Console.WriteLine(b++);

}

}

Lo ejecutamos y.... Nada. No lanza ninguna excepción, es más, vuelve a comenzar la cuenta, esto es así y es correcto, es decir, sigue la especificación. Entonces si queremos que se lance una excepción grotesca cuando se desborde algún tipo entero cómo hacemos. Así.

private void Test()

{

byteb = new byte();

Console.WriteLine(byte.MaxValue);

checked

{

for (int i = 0; i < 300; i++)

{

Console.WriteLine(b++);

}

}

}

Y nos aparece una excepción. En resumen, si queremos que se realice la comprobación de desbordamiento y se lance una excepción utilizamos checked sino unchecked.