【问题标题】:What to do when an enum name clashes with a class name?当枚举名与类名冲突时怎么办?
【发布时间】:2011-12-04 13:41:57
【问题描述】:

我有一个枚举 Pitch 和一个类 Pitch,对我来说自然应该这样命名,但是将两者同名会令人困惑。当枚举的名称与类类型冲突时,是否有任何准则?

示例:

public enum Pitch
{
    Fastball,
    Sinker,
    Curveball
}

public class Pitch
{
}

【问题讨论】:

  • 如果您有两种类型要命名相同,那么您的设计可能存在问题。你能告诉我们类和枚举的代码吗?

标签: c# naming-conventions


【解决方案1】:

为枚举命名 PitchType、PitchKind、PitchMagnitude、PitchQuality、PitchShape、PitchSpeed、PitchStrength 或任何最合适的名称。


另一个考虑因素是类设计是否可以改进。除了在 Pitch 类中使用 PitchType 属性,您还可以创建一个类层次结构:

public abstract class Pitch {}

public class Fastball : Pitch {}

public class Sinker : Pitch {}

public class Curveball : Pitch {}

【讨论】:

  • PitchType 怎么样?谁能想到比 Type 更好的词,因为它在运行时本身就有意义?
  • public enum Pitch { Fastball, Curveball, Sinker }
  • 枚举的其他名称:ActionPitch、EventPitch
【解决方案2】:

在类中嵌入枚举:

public class Pitch
{
    public enum Kind {
        Fastball, 
        Curveball, 
        Sinker
    }
}

然后你可以通过类来访问它:

Pitch.Kind.Fastball

【讨论】:

  • 我想到了,但这是否违反了一些我想不到的 OO 约定?让一个人通过额外的命名来处理冲突是否意味着它仍然是好的设计?
  • 我认为这里没有问题。但是枚举最好嵌入到将要使用它的类中,或者至少应该与它有很强的逻辑关系。
【解决方案3】:

使用命名空间对它们进行逻辑分组。对于框架,类名是全名,可能是MusicPlayer.Notes.Pitch 而不仅仅是Pitch。因此,不同名称空间中的类不会发生冲突。

【讨论】:

  • using 语句会有所不同。
  • @Okuma.Scott:using 语句是关于确定性资源管理的,您是否将它与using 指令 混淆了?在这种情况下,如果您最终使用 using 两个命名空间,您只需在使用时完全限定类型名称。如果您将类型别名为已经存在的名称,那么这完全是您的问题。
  • 感谢您的更正 - 我的意思是 using directive
【解决方案4】:

当枚举没有嵌入到类中时,请确保在标签前使用不同的名称,以防止名称冲突。您还可以按照 joey 的建议使用命名空间。

【讨论】:

    【解决方案5】:
    public class Pitch
    {
        public enum Enum {
            Fastball, 
            Curveball, 
            Sinker
        }
    }
    

    Pitch.Enum.Fastball

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多