Tipi di classi e enumerazioni di nidificazione

3

Se un tipo enum è dedicato solo a una classe specifica, ha senso dichiararlo all'interno della classe stessa? Voglio dire, aiuterebbe a capire che questo tipo di enum è stato progettato per essere usato solo con questa classe? Un'altra opzione sarebbe metterli nello stesso spazio dei nomi.

Dobbiamo anche considerare che un'altra classe Dimension potrebbe aver bisogno di un diverso enum tipo sempre chiamato toleranceType .

Grazie.

public class Dimension
{
    public enum toleranceType
    {
        None,
        Symmetric,
        Deviation
    }

    public toleranceType ToleranceMode { get; set;}
}

Invece di:

public enum toleranceType
{
   None,
   Symmetric,
   Deviation
}

public class Dimension
{
    public toleranceType ToleranceMode { get; set;}
}
    
posta abenci 07.09.2017 - 12:45
fonte

3 risposte

2

Non penso ci sia alcuna differenza di codice compilata tra un enum annidato e uno in uno spazio dei nomi. Stai semplicemente aggiungendo la classe contenitore o lo spazio dei nomi al nome completo.

Tuttavia, è consuetudine mettere le classi nei propri file per verificarne la leggibilità.

Dato che non si ottiene alcuna differenza funzionale, vorrei andare con la convenzione di un nuovo file per l'enum, e dargli solo uno spazio dei nomi appropriato

Se hai uno schema di molte classi piccole ognuna con il suo enum specifico, allora posso vedere che la nidificazione potrebbe essere una soluzione pulita però.

    
risposta data 07.09.2017 - 16:09
fonte
0

Non vorrei annidare i valori enum come sono pubblici. Questa è la raccomandazione di Microsoft sulle linee guida di progettazione .Net: link Namespace Ecco come evitare di nominare le collisioni, non tramite l'annidamento.

Anche io farei il nome enum PascalCased.

    
risposta data 07.09.2017 - 23:21
fonte
-1

Le enumerazioni sono spesso un segno che non stai progettando correttamente i tuoi oggetti e ogni valore di enum è meglio essere un oggetto con un'interfaccia comune, specialmente quando c'è molto del tuo codice in se e passa istruzioni basate sui valori di un enum. Le enumerazioni sono più un concetto di codifica procedurale e il loro uso dovrebbe essere limitato nel codice veramente orientato agli oggetti. Personalmente li trovo molto utili per rendere le costanti correlate più ovvie e più leggibili, specialmente quando non guidano la funzionalità da soli. Questo domanda ha più informazioni sugli usi appropriati per l'enumerazione in un design orientato agli oggetti.

Per rispondere alla tua domanda più direttamente, tenere le enumerazioni al di fuori delle definizioni di classe è solitamente la scelta migliore, ma solo in situazioni in cui l'enum è una buona scelta per cominciare.

    
risposta data 07.09.2017 - 14:50
fonte