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

本文关键字:定义 枚举 命名空间 | 更新日期: 2023-09-27 18:09:02

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

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

我不明白这和在类中声明枚举有什么区别。我敢说,你仍然可以在类中"覆盖"这些枚举。

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

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

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

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

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

代替:

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

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