【问题标题】:What is the advantage of defining an public Enum inside a class? [duplicate]在类中定义公共枚举有什么好处? [复制]
【发布时间】:2020-03-06 21:11:45
【问题描述】:

我一直在寻找使用 Microsoft.SqlServer.Management.Smo.StoredProcedure 类中的函数 ScriptHeader。我找到了怎么做(期望那里有一个命名空间文件夹)。但我只是想了解为什么在类似的类中定义枚举的原因。这样做有什么好处?

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
    }
  }
}

【问题讨论】:

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

标签: c# oop smo


【解决方案1】:

我只是想了解为什么在类似的类中定义枚举的原因。这样做有什么好处?

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

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

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

我不清楚为什么这个课程的作者——显然是在微软工作的——在这种情况下没有遵循微软的指导方针。我想你得问问他们才能确定。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多