2010-04-16 14 views

Respuesta

12

No tiene mucho sentido, realmente, excepto que si el tipo subyacente defecto (int) no es suficiente para ti, es decir. Si desea usar valores enteros más altos entonces puede hacerlo long. Esto puede ser útil cuando tiene una enumeración [Flags] con más de 32 valores.

Se puede hacer byte o short sólo para restringir el rango de valores, pero en realidad todavía se tome 4 bytes (es decir. Mismos como int).

+3

¿Tiene una citación para esa última parte? – porges

+9

Para una sola variable, la última parte puede ser correcta debido al relleno. Sin embargo, creo que si tienes una matriz grande de una enumeración con un tipo de byte subyacente, será como tener un 'byte []' en lugar de un 'int []'. –

+0

Sí, lo que dijo Jon Skeet. ¿Pero quién diablos usa una variedad de enumeraciones? :) – EMP

3

De enum (C# Reference)

El tipo subyacente especifica cuánto se asigna de almacenamiento para cada empadronador. Sin embargo, se necesita un molde explícito para convertir de tipo enum a un tipo integral.

+2

Supongo que me perdí esa pequeña y jugosa información ... jaja – Marlon

3

Además de las razones técnicas por las que ... Aquí hay un principio de diseño.

especificando la enumeración como tener el almacenamiento byte es un detalle de implementación. Usar la enumeración es un problema diferente, no debería tener que saber o preocuparse por los detalles de implementación de la misma.

En el código del cliente, el hecho de que esté usando una enumeración debería significar que de hecho quiere decir usar una enumeración, no un byte, o un largo etc. De lo contrario, ¿por qué no usar el tipo de datos que quiere decir?

fuerza al tipo de languaged como C# se esfuerzan para que sea un poco más difícil de paso fuera de su codificación "contratos" esto generalmente ayuda a hacer el diseño de aplicaciones sólo un poco mejor.

Ahora, por supuesto, no estoy diciendo que no hay veces que tiene que involucrarse en los detalles de implementación, un buen ejemplo es en decir un objeto asignador relacional (ORM) en la que está correlacionando un C# tipo de datos a un tipo de datos de base de datos , las enumeraciones son un buen ejemplo en el que debe conocer su tipo de almacenamiento para asignarlo. Pero en estos casos, su IMO es buena para tener que expresarse o reflejarse explícitamente, es una buena bandera en las revisiones de que aquí estás específicamente saliendo del uso habitual.

Cuestiones relacionadas