2011-09-19 16 views

Respuesta

21

Las enumeraciones son tipos, al igual que las clases. Cuando declaras una enumeración dentro de una clase, es solo un tipo anidado. Una enumeración anidada solo oculta otras enumeraciones con el mismo nombre que se declaran en ámbitos externos, pero aún puede hacer referencia a la enumeración oculta a través de su nombre completo (utilizando el prefijo del espacio de nombres, en su ejemplo).

La decisión de declarar un enum de nivel superior o una enumeración anidada depende de su diseño y de si esas enumeraciones serán utilizadas por cualquier otra cosa que no sea la clase. También puede hacer que una enumeración anidada sea privada o protegida para su tipo adjunto. Pero, las enumeraciones de nivel superior son mucho más comunes.

+0

Entonces, ¿el nombre propio es una enumeración de nivel superior? – surfasb

+0

Creo que sí ... Puede encontrar esta definición [aquí] (http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx). –

4

Si pones las enumeraciones de la clase, lo que tendría que especificar el nombre de la clase cada vez que lo utilice fuera de la clase, por ejemplo:

SomeLongClassName x = new SomeLongClassName(SomeLongClassName.Game.High, SomeLongClassName.Switch.On); 

en lugar de:

SomeLongClassName x = new SomeLongClassName(Game.High, Switch.On); 

Puedes decidir poner la enumeración dentro de una clase si solo la usa esa clase, pero ese tipo de aislamiento solo funciona para las clases. Si tiene una enumeración que solo se utiliza con un único método, no puede ponerlo dentro del método.

Cuestiones relacionadas