#Define compilateur directive en C #
-
26-09-2019 - |
Question
En C, je pouvais déclarer une directive du compilateur comme suit:
#define MY_NUMBER 10
Cependant, en C #, je parais que pour pouvoir faire ceci:
#define MY_NUMBER
Ce qui est évidemment inutile dans ce cas.
Est-ce exact, ou que je fais quelque chose de mal? Sinon, quelqu'un peut-il suggérer une façon de le faire, que ce soit au niveau de l'espace de noms ou solution? Je pensais que peut-être de créer une classe statique, mais qui semble être surpuissant pour une valeur.
La solution
Oui, il est correct.
Voici une citation de la documentation MSDN:
Les directives de prétraitement fournissent la capacité pour sauter certaines conditions sections de fichiers source, à rapport conditions d'erreur et d'avertissement, et délimitation des régions distinctes de la source code . Le terme « pré-traitement directives » est utilisé uniquement pour cohérence avec le C et C ++ langages de programmation. En C #, il y a aucune étape de pré-traitement séparée; directives de prétraitement sont traitées dans le cadre de la lexical la phase d'analyse.
Vous ne pouvez pas vraiment définir des constantes compilateur, comme en C et C ++.
Ressources connexes:
Autres conseils
Beaucoup des autres réponses vous suggérons d'utiliser un champ de public const
. Notez cependant qu'un public const
sera compilé dans des ensembles de référencement, vous forçant à recompiler non seulement l'assemblage, il est défini dans, mais aussi tous les référencement assemblée si jamais vous changez la valeur du const
.
Si vous n'êtes pas certain que la valeur ne sera jamais à changer, un champ de public static readonly
est une meilleure alternative.
Oui, vous avez raison. const
et readonly
sont vraiment vos seules options.
Vous pouvez définir un const ou statique en lecture seule, et si vous le voulez conditionnellement vous pouvez envelopper dans une directive #if
#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
Vous aimerez également vérifier énumérations, comme
enum Numbers
{
Nothing = 0,
Dads = 5,
My = 10,
LittleJims = 25
}
Ainsi, au lieu de MY_NUMBER de C, vous avez Numbers.My.
Utilisation du public const
AFAIK,
C # n'utilise pas définit pré-processeur pour effectuer le remplacement dans le code, de sorte que vous devez utiliser une constante.
Cela devrait faire l'affaire:
public const int MY_NUMBER = 10;