枚举在类体外但在命名空间内的定义

今天,我遇到了一些像这样的代码。

namespace Foo { public enum Game{ High, Low}; public enum Switch{On, Off}; public class Bar() { // Blah } } 

我无法弄清楚它与声明课堂内的枚举之间的区别是什么。 AFAIK,你仍然可以“覆盖”课堂内的那些枚举。

枚举是类型,就像类一样。 在类中声明枚举时,它只是一个嵌套类型。 嵌套的枚举只是隐藏了在外部作用域中声明的具有相同名称的其他枚举,但您仍然可以通过其完全限定名称引用隐藏的枚举(在您的示例中使用名称空间前缀)。

是否声明顶级枚举或嵌套枚举的决定取决于您的设计以及这些枚举是否将由除该类之外的任何其他内容使用。 您还可以将嵌套枚举设为私有或受其封闭类型保护。 但是,顶级枚举更为常见。

如果将枚举放在类中,则每次在类外部使用时都需要指定类名,例如:

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

代替:

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

如果它只被该类使用,你可以决定将ennumeration放在一个类中,但这种隔离只适用于类。 如果您的枚举仅由单个方法使用,则不能将其放在方法中。