C#bloque marcado
checked y unchecked (3)
¿Alguien me puede explicar qué es exactamente lo que está marcado como un bloque sin marcar?
¿Y cuándo debo usar cada uno?
los bloques marcados se utilizan para manejar situaciones de desbordamiento / desbordamiento aritmético. Por ejemplo:
Supongamos que desea convertir un valor int en un valor de tipo corto (denominado conversión de reducción). La variable de tipo int puede tener un rango de valores de -2,147,483,648 a 2,147,483,647. Pero el corto solo puede tener de -32,768 a 32,767.
Debido a esa razón, la variable corta no puede tener todos los valores posibles que puede tener una variable int. Si algunos cómo, uno puede emitir como siguiente ejemplo:
int y = 1000000000;
short x = (short)y;
Claramente se puede ver que el valor de y está fuera de los valores válidos para una variable corta. Así se produce la situación de desbordamiento aritmético.
Por defecto, C # no lanza ninguna excepción para el código anterior. Pero hay algunas maneras en que puedes lanzar una excepción y manejarla. En ese caso, los bloques marcados son útiles.
try
{
checked
{
int y = 1000000000;
short x = (short)y;
}
}
catch (OverflowException ex)
{
MessageBox.Show("hey, we got a overflow/underflow situation");
}
catch (Exception ex)
{
MessageBox.Show("Error");
}
el bloque catch provocó el lanzamiento de una excepción de desbordamiento, si la conversión provocó una situación de desbordamiento / desbordamiento. En este caso se muestra el mensaje de error.
"hey, tenemos una situación de desbordamiento / subdesbordamiento"
los bloques sin marcar se utilizan si deseamos descartar el desbordamiento / desbordamiento cuando ocurre una conversión y continuar la operación.
Desbordamiento aritmético; por ejemplo:
int i = int.MaxValue -10;
checked {
i+= 20; // boom: OverflowException
// "Arithmetic operation resulted in an overflow."
}
Por lo tanto, utilice el checked
cuando no desee que un desbordamiento / envoltura accidental sea un problema, y preferiría ver una excepción.
unchecked
marcar establece explícitamente el modo para permitir el desbordamiento; el valor predeterminado está unchecked
menos que le indique al compilador lo contrario, ya sea a través del código (arriba) o un interruptor del compilador ( /checked
en csc).
Desde MSDN
Las declaraciones de C # se pueden ejecutar en el contexto marcado o no marcado. En un contexto comprobado, el desbordamiento aritmético genera una excepción. En un contexto no verificado, el desbordamiento aritmético se ignora y el resultado se trunca.
En resumen, se utilizan para definir el contexto en el que tienen lugar las operaciones aritméticas. En el contexto marcado, se lanza una excepción cuando ocurre un desbordamiento. En un contexto sin marcar, no se lanza una excepción y, en su lugar, se envuelve el valor.
Ahora, si su contexto está sin marcar o está marcado depende de las opciones de su compilador. Por lo tanto, si desea anular manualmente el contexto, es decir, realizar una operación marcada en un contexto que no se haya verificado o viceversa, debe usar estas palabras clave.
Para más detalles y ejemplos siga el enlace dado arriba.