Domanda

Saluti,

Sono un principiante di OO e la programmazione e ho la seguente situazione:

Ho un insieme di valori const e enumerazioni che molte delle classi I implementano azione.

Queste classi sono indipendenti vale a dire altro che la condivisione di questi valori, non interagiscono tra di loro, in modo da ereditare non funzionerà.

Mi chiedevo; Se creo una classe vuota con solo questi const e enumerazioni e quindi dichiarare un oggetto di queste classi in ogni classe quindi ho potuto usare questi valori come:

globals.enum.enummember?

È questa programmazione suono o c'è un modo migliore di fare questo?

Grazie per il vostro tempo.

È stato utile?

Soluzione

La pratica migliore è quella di dichiarare semplicemente le enumerazioni fianco con le vostre classi, non annidati in una classe. In realtà, i tipi nidificati sono di solito una cattiva idea, a meno che non sono private. Ci sono eccezioni, naturalmente, ma per la maggior parte si sono meglio senza la nidificazione.

Le costanti devono essere definiti in una classe, ma non è necessario creare un'istanza di un oggetto della classe di usarli. Inoltre possono essere pubblici, quindi non c'è bisogno di ereditare nulla. Se ci pensate abbastanza difficile, si dovrebbe essere in grado di capire un buon nome per la classe che contiene queste costanti.

La pratica dimostra che le costanti e le enumerazioni raramente sono semplicemente globale. La maggior parte del tempo sono strettamente accoppiati con una o poche classi. Si dovrebbe quindi definire queste costanti come una parte della classe appropriata e mettere enumerazioni nello stesso namespace come la classe che li utilizzano.

Altri suggerimenti

È possibile utilizzare classe statica con i membri statici per ottenere un comportamento desiderato:

namespace A {
    public static class Enum1 {
       public static readonly int EnumMember1 = 1;
       public static readonly int EnumMember2 = 2;
       public static readonly int EnumMember3 = 3;
    }
}

Si dovrebbe utilizzare questo nel seguente modo:

int x = A.Enum1.EnumMember2;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top