#Define Compiler Diretiva em C#
-
26-09-2019 - |
Pergunta
Em C, eu poderia declarar uma diretiva do compilador da seguinte maneira:
#define MY_NUMBER 10
No entanto, em C#, eu só parece ser capaz de fazer isso:
#define MY_NUMBER
O que é obviamente inútil neste caso.
Isso está correto ou estou fazendo algo errado? Caso contrário, alguém pode sugerir uma maneira de fazer isso, em namespace ou no nível da solução? Eu pensei em talvez criar uma classe estática, mas isso parece estar exagerado por um valor.
Solução
Sim, está correto.
Aqui está uma cotação da documentação do MSDN:
As diretivas de pré-processamento fornecem o Capacidade de pular condicionalmente seções de arquivos de origem, relatar erros e condições de aviso e delinear regiões distintas do código -fonte. O termo "diretrizes de pré-processamento" é usado apenas para consistência com as linguagens de programação C e C ++. Em C#, não há etapa de pré-processamento separada; As diretrizes de pré-processamento são processadas como parte da fase de análise lexical.
Portanto, você não pode realmente definir constantes do compilador, como em C e C ++.
Recursos relacionados:
Outras dicas
Muitas outras respostas sugerem usar um public const
campo. Note no entanto que um public const
será compilado em assemblies referenciando -o, forçando -o a recompilar não apenas a montagem em que está definido, mas também toda montagem referenciando -a se você mudar o valor do const
.
Se você não tiver certeza de que o valor nunca terá que mudar, um public static readonly
O campo é uma alternativa melhor.
Sim, você está correto. const
e readonly
são realmente suas únicas opções.
Você pode definir uma const ou uma leitura estática e, se quiser condicionalmente, pode envolvê -lo em uma diretiva #if
#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
Você também pode verificar as enumes, como
enum Numbers
{
Nothing = 0,
Dads = 5,
My = 10,
LittleJims = 25
}
Então, em vez do My_Number de C, você tem números.
Use public Const
ATÉ ONDE SEI,
C# não usa o pré-processador define para executar a substituição no código, portanto, você deve usar uma constante.
Isso deve fazer o truque:
public const int MY_NUMBER = 10;