2011-12-04 6 views
5

私はenum Pitchとclass Pitchを持っていますが、自然に私にはこのように名前を付けるべきですが、同じ名前を持つのは混乱します。列挙型の名前がクラス型と衝突するときのガイドラインはありますか?enum名がクラス名と衝突する場合はどうすればよいですか?

例:グループ、論理的にそれらに

public enum Pitch 
{ 
    Fastball, 
    Sinker, 
    Curveball 
} 

public class Pitch 
{ 
} 
+3

同じ名前を付ける2つのタイプがある場合、おそらくデザインに問題があります。クラスと列挙型のコードを表示できますか? – 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はどうですか?しかし、それはランタイム自体の中で意味を持っているので、誰もタイプよりも良い言葉を考えることができますか? – Rhubarb

+1

私たちにenumを見せてもらえますか?それには正確に何が含まれていますか? –

+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

を参照してください。[入れ子になったC++クラスと列挙型を使用する場合の長所と短所](http://stackoverflow.com/questions/216748/pros-and-cons-ofusing-nested-c-classes-and-enumerations) 。 –

1

enumがクラスに埋め込まれていない場合、名前の衝突を防ぐために、ラベルの前に別の名前を使用するようにしてください。 joeyによって提案された名前空間を使用することもできます。

関連する問題