私はenum Pitchとclass Pitchを持っていますが、自然に私にはこのように名前を付けるべきですが、同じ名前を持つのは混乱します。列挙型の名前がクラス型と衝突するときのガイドラインはありますか?enum名がクラス名と衝突する場合はどうすればよいですか?
例:グループ、論理的にそれらに
public enum Pitch
{
Fastball,
Sinker,
Curveball
}
public class Pitch
{
}
私はenum Pitchとclass Pitchを持っていますが、自然に私にはこのように名前を付けるべきですが、同じ名前を持つのは混乱します。列挙型の名前がクラス型と衝突するときのガイドラインはありますか?enum名がクラス名と衝突する場合はどうすればよいですか?
例:グループ、論理的にそれらに
public enum Pitch
{
Fastball,
Sinker,
Curveball
}
public class Pitch
{
}
列挙型のPitchType、PitchKind、PitchMagnitude、PitchQuality、PitchShapeなどの名前を付けてください。
さらに、クラスの設計を改善できるかどうかを検討します。代わりに、クラスピッチ内のPitchType特性を有するので、あなたはまた、クラス階層を作成することができます。
public abstract class Pitch {}
public class Fastball : Pitch {}
public class Sinker : Pitch {}
public class Curveball : Pitch {}
使用名前空間。フレームワークの場合、クラス名はフルネームで、MusicPlayer.Notes.Pitch
であり、ただしPitch
ではありません。したがって、異なる名前空間のクラスは衝突できません。
埋め込みクラスの列挙:
public class Pitch
{
public enum Kind {
Fastball,
Curveball,
Sinker
}
}
あなたは、クラスを介してアクセスすることができます
をPitch.Kind.Fastball
私はそれを考えましたが、それは私が考えることができないオブジェクト指向のいくつかの規則に違反していますか?クラッシュに対処するために命名する余分なレベルを作ることは、それはまだ良いデザインであることを意味しますか? – Rhubarb
私はここで問題はありません。しかし、列挙型は、それが使用されるクラスに埋め込まれていることが望ましいか、少なくともそれと強い論理的関係を持っていなければなりません。 –
を参照してください。[入れ子になったC++クラスと列挙型を使用する場合の長所と短所](http://stackoverflow.com/questions/216748/pros-and-cons-ofusing-nested-c-classes-and-enumerations) 。 –
enumがクラスに埋め込まれていない場合、名前の衝突を防ぐために、ラベルの前に別の名前を使用するようにしてください。 joeyによって提案された名前空間を使用することもできます。
同じ名前を付ける2つのタイプがある場合、おそらくデザインに問題があります。クラスと列挙型のコードを表示できますか? – Steven