Come affrontare quasi le stesse enumerazioni?

4

Devo definire enumerazioni in diverse classi. La maggioranza dei campi è la stessa in tutte le enumerazioni. Ma uno ha uno o due campi in più, un altro ha meno campi. Ora mi chiedo quale sia il modo migliore per affrontare questo?

  1. Crea enumerazioni separate

    public enum Foo {field1, field2, field5 };
    public enum Bar {field1, field2, field3, field4 };
    
  2. o usa un enum generale per tutti loro

    public enum FooBar {field1, field2, field3, field4 , field5};
    

Le enumerazioni contengono l'elenco di azioni disponibili per ogni classe.

Aggiornamento : scusa se la domanda non è stata sufficientemente chiara. Voglio utilizzare queste enumerazioni come parameters nelle classi metodi . ad esempio classOne ha un metodo come di seguito:

public void DoSomeThing(Foo action,object moreData)
{
    // operation desired
}

qui voglio che azione sia limitato a Insert , Update e Delete

mentre in classTwo :

public void DoSomeThingElse(Foo action)
{
    // operation desired
}

Voglio limitare l'azione a Insert e Select

    
posta mohsen dorparasti 29.09.2012 - 09:21
fonte

3 risposte

8

Dovresti usare un approccio diverso.

Crea un'enumerazione che contiene tutte le azioni disponibili (inserisci, aggiorna, elimina, ecc.). Quindi puoi aggiungere un nuovo campo (statico) a ogni classe _ un elenco di elementi di quell'enumerazione _ per rappresentare l'elenco di azioni valide.

Non ha senso avere un'enumerazione separata per ogni classe _ le enumerazioni rappresentano semanticamente valori dello stesso tipo.

Ad esempio, hai un'enumerazione:

public enum ACTIONS { insert = 1, update = 2, delete = 3 }

Nella tua classe lo useresti in questo modo:

public class MyClass
{
    public static ACTIONS[] Actions = { ACTIONS.insert, ACTIONS.delete }; 
}
    
risposta data 29.09.2012 - 14:34
fonte
6

The enumerations contain the list of actions available for each class.

Perché stai cercando di usare enums per risolvere il tuo problema. Creerei invece un'interfaccia per coprire tutti i comportamenti (azioni) comuni delle mie classi. Puoi creare un'interfaccia ICommon che conterrà tutti i tuoi comportamenti comuni affinché la classe supporti i tuoi comportamenti di progettazione e classe.

Ci sono post molto buoni su questo argomento come Progettazione di C # Software con interfacce o puoi anche fare riferimento a Wikipedia per informazioni comuni - Il concetto di interfaccia di classe .

    
risposta data 29.09.2012 - 16:30
fonte
2

Concettualmente, le enumerazioni parlano dello stesso concetto o cosa o sono solo correlate? Ad esempio, potrei avere un Direction enum e un Gears enum. Entrambi possono avere un valore Reverse ma significano cose molto diverse. In generale, unisci i concetti solo se sono gli stessi. Altrimenti stai facendo un'ipotesi.

Detto questo, dal tuo commento sopra, sembra che stiano parlando dello stesso concetto (inserisci, aggiorna e cancella) quindi vorrei unirli.

Inoltre, se l'interoperabilità è un problema o sono simili, si consideri l'assegnazione dei valori fissi ai valori enum, ad es. 1 per l'inserimento, 2 per l'eliminazione e così via. Renderà più facile la conversione e la compatibilità.

    
risposta data 29.09.2012 - 14:34
fonte

Leggi altre domande sui tag