Stavo leggendo alcune enumerazioni e le ho trovate molto simili alla dichiarazione di costanti. Come faccio a sapere quando utilizzare una costante anziché un'enumerazione o viceversa. Quali sono alcuni dei vantaggi dell'utilizzo di enumerazioni?
Stavo leggendo alcune enumerazioni e le ho trovate molto simili alla dichiarazione di costanti. Come faccio a sapere quando utilizzare una costante anziché un'enumerazione o viceversa. Quali sono alcuni dei vantaggi dell'utilizzo di enumerazioni?
Risposte:
Usa le enumerazioni quando vuoi definire un intervallo di valori che qualcosa può essere. Il colore è un esempio ovvio come:
public enum Colour
{
White,
Red,
Blue
}
O forse una serie di possibili cose come: (Esempio che ho rubato da qui perché sono pigro)
[FlagsAttribute]
enum DistributedChannel
{
None = 0,
Transacted = 1,
Queued = 2,
Encrypted = 4,
Persisted = 16,
FaultTolerant = Transacted | Queued | Persisted
}
Le costanti dovrebbero essere per un singolo valore, come PI. Non c'è un intervallo di valori PI, c'è solo PI.
Altri punti da considerare sono:
Type Safety"
Quello che manca dalle altre risposte è che le enumerazioni hanno un tipo di base intero. Puoi cambiare il valore predefinito da int a qualsiasi altro tipo integrale eccetto char come:
enum LongEnum : long {
foo,
bar,
}
È possibile eseguire il cast in modo esplicito e implicito nel tipo di base, il che è utile nelle istruzioni switch. Attenzione che è possibile eseguire il cast di qualsiasi valore del tipo di base su un enum, anche se l'enum non ha membri con il valore appropriato. Quindi utilizzare sempre la sezione predefinita in uno switch è una buona idea. A proposito, .NET stesso consente anche enumerazioni con valori in virgola mobile, ma non è possibile definirle in C #, anche se penso che sia ancora possibile utilizzarle (tranne in switch).
Inoltre, l'utilizzo di enumerazioni offre una maggiore sicurezza dei tipi. Se intendi utilizzare, ad esempio, costanti int come parametri del metodo, potrei chiamare il metodo con qualsiasi valore int. Certo, tramite il casting può accadere anche con le enumerazioni, ma non accadrà accidentalmente. Peggio è la possibilità di confondere l'ordine dei parametri.
void method(int a, int b) {...}
Se solo la costante A può entrare in a e la costante B solo può entrare in b, l'uso di due diversi tipi di enum rivelerà qualsiasi uso improprio durante la compilazione.
Una costante è una caratteristica del linguaggio che dice che la variabile non cambierà valore (quindi il compilatore può fare ottimizzazioni attorno a quella conoscenza) dove un enum è un tipo specifico.
Le costanti possono essere qualsiasi tipo di dati, ma un enum è un enum.
Uso un'enumerazione ovunque tu possa avere un numero di opzioni e desideri migliorare la leggibilità del codice. cioè potresti avere livelli di traccia come un int con valori 0, 1, 2 o come enum come errore, avviso e informazioni.
Gli Enum possono anche essere usati come operatori bit per bit, cioè FontStyle.Bold | FontStyle.Italic ti darebbe caratteri in grassetto e corsivo.
Oltre alla risposta di Robert:
Usa enum per un insieme finito di valori denominati. Non ti interessa davvero il valore numerico dietro ogni simbolo (ma hai ancora la possibilità di imporli, ad esempio per la compatibilità con un sistema legacy).
Robert: Sì, gli Enum possono essere usati come campi di bit. Usa l' attributo Flags (e assicurati che i membri dell'enumerazione abbiano valori numerici adeguati).
La costante AC # è simile a una variabile in quanto dà un nome definito a un valore. Tuttavia, una costante differisce da una variabile standard perché una volta definita, il valore assegnato alla costante non può mai essere modificato. Il vantaggio principale delle costanti è la loro assistenza nella creazione di codice auto-documentante oltre a consentire la dichiarazione dei valori chiave in un unico posto, il che consente una facile manutenzione nel caso in cui il valore debba essere aggiornato e il software ricompilato.
Mentre gli elenchi Enumerator sono utili per definire sequenze e stati, in particolare quando esiste una progressione naturale attraverso tali stati. Questo perché ogni costante nell'elenco può essere formattata e confrontata utilizzando il nome o il valore. È inoltre possibile utilizzare un enum per definire un insieme limitato di valori validi.
Una cosa che trovo utile quando si usa enum
invece di const
è che puoi iterare attraverso i valori in un enum
, è molto più difficile farlo con i const
valori.