2011-12-04 37 views
5

我有一个枚举Pitch和一个类Pitch,对我来说这两个名字都应该这样命名,但是同名的这两个名字都是令人困惑的。有没有关于枚举的名称与类类型冲突的指导原则?枚举名与类名冲突时该怎么办?

例:

public enum Pitch 
{ 
    Fastball, 
    Sinker, 
    Curveball 
} 

public class Pitch 
{ 
} 
+3

如果您有两种类型要命名相同,那么您的设计可能存在问题。你能向我们展示这个类和枚举的代码吗? – Steven

回答

6

将枚举PitchType,PitchKind,PitchMagnitude,PitchQuality,PitchShape或任何最适合的名称命名。


另一个考虑是班级设计是否可以改进。相反,具有一流的间距内PitchType财产,你也可以创建一个类层次结构:

public abstract class Pitch {} 

public class Fastball : Pitch {} 

public class Sinker : Pitch {} 

public class Curveball : Pitch {} 
+0

PitchType如何?任何人都可以想到比Type更好的词,因为它在运行时本身有意义吗? – Rhubarb

+1

你能向我们展示枚举吗?它包含了什么? –

+0

public enum Pitch {Fastball,Curveball,Sinker} – Rhubarb

3

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

3

嵌入的枚举类中的:

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

然后,您可以通过类访问:

Pitch.Kind.Fastball 
+0

我想到了那个,但是这违反了一些我无法想到的面向对象的约定吗?是否让人们为了应对冲突而进行额外的命名意味着它仍然是一个好设计? – Rhubarb

+0

我在这里看到没有问题。但枚举应该最好嵌入到它将被使用的类中,或者至少它应该与它有强大的逻辑关系。 –

+0

请参阅stackoverflow问题[使用嵌套的C++类和枚举的优点和缺点?](http://stackoverflow.com/questions/216748/pros-and-cons-of-using-nested-c-classes-and-enumerations) 。 –

1

当枚举未嵌入到类中时,请确保在标签前使用了一些不同的名称,以防止名称冲突。您也可以使用joey建议的命名空间。