Direttiva del compilatore #define in C #
-
26-09-2019 - |
Domanda
In C, ho potuto dichiarare una direttiva del compilatore come segue:
#define MY_NUMBER 10
Tuttavia, in C #, appaio solo per essere in grado di fare questo:
#define MY_NUMBER
che è ovviamente inutile in questo caso.
È questo corretto, o sto facendo qualcosa di sbagliato? In caso contrario, qualcuno può suggerire un modo di fare questo, sia a livello di spazio dei nomi o soluzione? Ho pensato forse di creare una classe statica, ma che sembra essere eccessivo per un valore.
Soluzione
Sì, è corretto.
Ecco una citazione dalla documentazione MSDN:
Le direttive di pre-elaborazione forniscono capacità di saltare condizionale sezioni del file sorgente, alla relazione condizioni di errore e di avviso, e per delineano distinte regioni di sorgente codice . Il termine "pre-elaborazione direttive" viene utilizzato solo per coerenza con la C e C ++ linguaggi di programmazione. In C #, non v'è nessuna fase di pre-elaborazione separata; pre-elaborazione direttive trasformati come parte della lessicale analisi di fase.
Quindi, non si può davvero definire costanti del compilatore, come in C e C ++.
Risorse correlate:
Altri suggerimenti
Un sacco di altre risposte suggeriscono utilizzando un campo public const
. Nota, tuttavia, che un public const
sarà compilato in assembly riferimento esso, ti costringe a ricompilare non solo il gruppo si è definito in, ma anche ogni assemblea riferimento che se mai cambiare il valore della const
.
Se non si è certi che il valore sarà mai al cambiamento, un campo public static readonly
è un'alternativa migliore.
Sì, siete sulla strada giusta. const
e readonly
sono davvero le uniche opzioni.
È possibile definire un const o uno statica di sola lettura, e se lo vuoi condizionale è possibile avvolgerla in un #if direttiva
#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
Ti potrebbe piacere anche per verificare le enumerazioni, come
enum Numbers
{
Nothing = 0,
Dads = 5,
My = 10,
LittleJims = 25
}
Così, invece di MY_NUMBER di C, si ha Numbers.My.
uso pubblico const
Per quanto ne so,
C # non utilizza definisce pre-processore per eseguire la sostituzione nel codice, quindi bisogna utilizzare una costante.
Questo dovrebbe fare il trucco:
public const int MY_NUMBER = 10;