CA1034:嵌套类型不应显示

Cha*_*adD 6 .net vb.net code-analysis

是我试图理解的规则的解释.这是代码分析器抱怨的简化代码:

Public Class CustomerSpeed

    Public Enum ProfitTypeEnum As Integer
        NotSpecified = 0
        FlatAmount = 1
        PercentOfProfit = 2
    End Enum

    Private _ProfitTypeEnum As ProfitTypeEnum

    Public Sub New(ByVal profitType As ProfitTypeEnum)

        _ProfitTypeEnum = profitType

    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

如果枚举仅适用于类,为什么在类中使它成为包含类型是一件坏事?似乎比我更整洁......

有谁知道以下行是什么意思?:

嵌套类型包括成员可访问性的概念,一些程序员不清楚这一概念

使用命名空间对类和枚举进行分组似乎不是解决此警告的有用方法,因为我希望枚举属于与类名相同的父级.

Guf*_*ffa 6

枚举通常不会放在使用枚举的类中,因此人们不习惯指定枚举的位置:

Dim speed As New CustomerSpeed(CustomerSpeed.ProfitTypeEnum.FlatAmount)
Run Code Online (Sandbox Code Playgroud)

将枚举放在类之外使其更易于使用:

Dim speed As New CustomerSpeed(ProfitTypeEnum.FlatAmount)
Run Code Online (Sandbox Code Playgroud)

枚举仍包含在与类相同的命名空间中.正如分析解释指出的那样,您应该使用命名空间来对公共成员进行分组,而不是将它们相互嵌套.

  • 将枚举放在类中可能看起来是个好主意,但是您正在创建一种隔离成员的模式,这些模式无法保持一致.仅在一个类中使用的枚举可以放在该类中,但是只能由一个方法使用的枚举不能放在该方法中. (2认同)

Nic*_*oiu 5

除了其他响应中已经涵盖的可用性和可发现性问题之外,还有一个潜在的可维护性问题。当您发现您的枚举在其他地方也可能有用的那一天会发生什么?将它移出其父类将是一个重大变化,复制它会引入其自身的可维护性问题,并且要求 API 使用者将它与另一个类一起使用开始变得丑陋。为什么不通过系统地避免嵌套枚举来避免这些潜在问题呢?