C# 在类中定义公共枚举的优点是什么?

C# 在类中定义公共枚举的优点是什么?,c#,oop,smo,C#,Oop,Smo,我一直希望使用Microsoft.SqlServer.Management.Smo.StoredProcess类中的函数。我找到了方法(希望在那里有一个名称空间文件夹)。但我只是想了解为什么枚举是在这样的类中定义的。这样做有什么好处 Server ServerConnect = new Server(new ServerConnection("database")); StoredProcedure proc = ServerConnect.Databases["myDB"].StoredPro

我一直希望使用Microsoft.SqlServer.Management.Smo.StoredProcess类中的函数。我找到了方法(希望在那里有一个名称空间文件夹)。但我只是想了解为什么枚举是在这样的类中定义的。这样做有什么好处

Server ServerConnect = new Server(new ServerConnection("database"));
StoredProcedure proc = ServerConnect.Databases["myDB"].StoredProcedures[0];
string header = proc.ScriptHeader(ScriptNameObjectBase.ScriptHeaderType.ScriptHeaderForCreateOrAlter);
类别定义为:

namespace Microsoft.SqlServer.Management.Smo {
  public class ScriptNameObjectBase : NamedSmoObject
  {
    protected internal ScriptNameObjectBase();

    public enum ScriptHeaderType
    {
        ScriptHeaderForAlter = 0,
        ScriptHeaderForCreate = 1,
        ScriptHeaderForCreateOrAlter = 2
    }
  }
}
我只是想知道为什么枚举是在这样的类中定义的。这样做有什么好处

据我所知,这种选择没有特别引人注目的优势或劣势。此外,这是一个不寻常的选择

Microsoft的框架设计指南不鼓励基类库提供程序以这种方式嵌套公共类型,因为这可能会造成混淆

此选择向使用此类的开发人员强调,枚举类型将与包含类的操作强关联,并且仅与该类关联。也就是说,它强调“不要为了自己的目的使用这个枚举;它实际上是外部类的一个实现细节”

我不清楚为什么这个课程的作者——显然是在微软工作的——在这个案例中没有遵循微软的指导方针。我想你得让他们知道


通常,将一个类型嵌套在另一个类型中的原因是为了使内部类型成为外部类型的实际实现细节。也就是说,将内部类型隐藏在外部类中,以避免使用开发人员永远不应该使用的类型“污染”外部类的命名空间。但在这些情况下,您会将内部类型标记为内部、受保护或私有。

@Amy我正在寻找更详细的答案。但是Eric Lippert提供了一个很好的答案。