在一个类中定义一个公共枚举有什么好处? - c#

我一直在寻找使用类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
    }
  }
}

参考方案

我很好奇地理解为什么在像这样的类中定义枚举的原因。这样做的好处是什么?

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

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

这种选择向使用此类的开发人员强调,枚举类型应与包含类的操作(仅与该类)紧密关联。也就是说,它强调“不要出于自己的目的使用此枚举;它实际上是外部类的实现细节”。

对我来说,目前尚不清楚为什么该类的作者(显然是在Microsoft工作的)在这种情况下没有遵循Microsoft的准则。我认为您必须让他们肯定知道。

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

方法链PHP OOP - php

通常,在许多框架中,您可以找到使用查询生成器创建查询的示例。通常您会看到:$query->select('field'); $query->from('entity'); 但是,在某些框架中,您也可以像这样$object->select('field') ->from(�…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

如何在Wiremock中为JUNIT匹配精确的json - java

我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares�…

如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…