2011-12-04 6 views
5

Ho un enum Pitch e un Pitch di classe, entrambi naturalmente per me dovrebbero essere nominati come tali, tuttavia è confuso avere entrambi con lo stesso nome. Ci sono delle linee guida per quando il nome di un enum si scontra con un tipo di classe?Cosa fare quando un nome enum si scontra con un nome classe?

ESEMPIO:

public enum Pitch 
{ 
    Fastball, 
    Sinker, 
    Curveball 
} 

public class Pitch 
{ 
} 
+3

Se si dispone di due tipi che si desidera assegnare lo stesso nome, è probabile che ci sia un problema nel progetto. Puoi mostrarci il codice per la classe e l'enum? – Steven

risposta

6

Assegna un nome all'enum PitchType, PitchKind, PitchMagnitude, PitchQuality, PitchShape o qualsiasi altra cosa che si adatta meglio.


Un'altra considerazione è se il design della classe potrebbe essere migliorato. Invece di avere una proprietà PitchType all'interno del Pitch di classe, si potrebbe anche creare una gerarchia di classi:

public abstract class Pitch {} 

public class Fastball : Pitch {} 

public class Sinker : Pitch {} 

public class Curveball : Pitch {} 
+0

Che ne dici di PitchType? Qualcuno può pensare ad una parola migliore di Type, dal momento che ha un significato all'interno del runtime stesso? – Rhubarb

+1

Puoi mostrarci l'enum? Cosa contiene esattamente? –

+0

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

3

Utilizzare spazi dei nomi per raggruppare logicamente. Per il framework il nome della classe è il nome completo, che può essere MusicPlayer.Notes.Pitch e non solo Pitch. Le classi nei diversi spazi dei nomi non possono quindi scontrarsi.

3

Incorpora enum nella classe:

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

È quindi possibile accedervi tramite la classe:

Pitch.Kind.Fastball 
+0

Ci ho pensato, ma ciò viola una convenzione di OO a cui non riesco a pensare? Farne uno che supera il livello extra di denominazione solo per affrontare uno scontro significa che è ancora un buon design? – Rhubarb

+0

Non vedo problemi qui. Ma l'enum dovrebbe preferibilmente essere incorporato nella classe in cui sarà usato o almeno dovrebbe avere una forte relazione logica con esso. –

+0

Vedere la domanda StackOverflow [Pro e contro dell'utilizzo di classi ed enumerazioni C++ annidate?] (Http://stackoverflow.com/questions/216748/pros-and-cons-of-using-nested-c-classes-and-enumerations) . –

1

Quando un enum non è incorporato in una classe, assicurarsi di utilizzare un nome diverso prima dell'etichetta in modo da evitare conflitti di nomi. Puoi anche utilizzare gli spazi dei nomi come suggerito da joey.