C# 类主体外部但命名空间内部的枚举定义

C# 类主体外部但命名空间内部的枚举定义,c#,class,enums,namespaces,C#,Class,Enums,Namespaces,今天,我遇到了一些这样的代码 namespace Foo { public enum Game{ High, Low}; public enum Switch{On, Off}; public class Bar() { // Blah } } 我无法理解这与在类中声明枚举之间的区别。好的,您仍然可以“覆盖”类中的那些枚举。枚举是类型,就像类一样。在类中声明枚举时,它只是一个嵌套类型。嵌套枚举仅隐藏在外部作用域中声明的具有相同名称的其他枚举,

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

namespace Foo
{

    public enum Game{ High, Low};
    public enum Switch{On, Off};

    public class Bar()
    {
    // Blah
    }
}

我无法理解这与在类中声明枚举之间的区别。好的,您仍然可以“覆盖”类中的那些枚举。

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


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

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

SomeLongClassName x = new SomeLongClassName(SomeLongClassName.Game.High, SomeLongClassName.Switch.On);
而不是:

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

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

因此,正确的名称是顶级枚举?我想是的。。。你可以找到这些定义。