Declarar una variable no asignada en C# no se marca con un error; es un error intentar asignar un valor no válido a una variable. Por ejemplo, aquí es una variable que no está definitivamente asignado (asumiendo que es local) después de la declaración:
uint z;
-1 no es un valor válido para un uint no más que 0,5 es, por lo que su ejemplo wouldn compilar
Ahora, en cuanto al resto: los tipos de enteros simplemente envuelven el desbordamiento, al igual que agregar 1 a int.MaxValue
devuelve int.MinValue
. Esta es una mejora significativa en el rendimiento en comparación con el hecho de que el programa verifique el desbordamiento de cada operación, a costa de no detectar un error.
Eso es solo si se encuentra en un contexto sin marcar, pero si realiza alguna de estas operaciones en un contexto verificado, obtendrá una excepción. Por ejemplo;
class Test
{
static void Main()
{
checked
{
uint a = 5;
uint b = 6;
uint c = a - b;
}
}
}
Run eso y verá un OverflowException
son lanzados. Si eso es lo que quiere para su proyecto completo, puede configurarlo en las propiedades del proyecto (o compilar con la opción de línea de comando /checked+
en csc
.)
EDITAR: Vale la pena señalar que las otras respuestas han demostrado que podría poner cantidades más pequeñas de código en el contexto verificado: solo la declaración y asignación de c
o incluso solo el cálculo. Todo es bastante flexible.
Lo mismo vale para ulong – Llyle