Directiva de compilación #define en C #
-
26-09-2019 - |
Pregunta
En C, que podría declarar una directiva de compilación de la siguiente manera:
#define MY_NUMBER 10
Sin embargo, en C #, sólo parecen ser capaces de hacer esto:
#define MY_NUMBER
¿Qué es obviamente inútil en este caso.
¿Es esto correcto o estoy haciendo algo mal? Si no es así, ¿Puede alguien sugerir una manera de hacer esto, ya sea en el espacio de nombres o nivel de la solución? Pensé tal vez la creación de una clase estática, pero que parece ser excesiva para un valor.
Solución
Sí, es correcto.
He aquí una cita de la documentación de MSDN:
Las directivas de pre-procesamiento proporcionan capacidad de saltar de forma condicional secciones de los archivos de origen, para informar las condiciones de error y de advertencia, ya regiones distintas delinean de fuente código . El término "pre-procesamiento directivas" se utiliza sólo para la coherencia con el C y C ++ lenguajes de programación. En C #, hay sin etapa de pre-procesamiento separado; pre-procesamiento de directivas son procesados ??como parte del léxico análisis de fase.
Así que realmente no se puede definir constantes de compilación, como en C y C ++.
recursos relacionados:
Otros consejos
Muchas de las otras respuestas sugieren el uso de un campo public const
. Nota sin embargo, que un public const
se compila en asambleas referencia a ella, lo que obligó a volver a compilar no sólo el montaje se define en cada asamblea, sino también hacer referencia a que si alguna vez cambia el valor de la const
.
Si no está seguro de que el valor nunca tendrá que cambiar, un campo public static readonly
es una mejor alternativa.
Sí, estás en lo correcto. const
y readonly
son realmente las únicas opciones.
Se puede definir una constante o una estática de sólo lectura, y si quieres que condicionalmente se puede envolver en una directiva #if
#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
También puede interesarte para comprobar las enumeraciones, como
enum Numbers
{
Nothing = 0,
Dads = 5,
My = 10,
LittleJims = 25
}
Así que, en lugar de MY_NUMBER de C, que tiene Numbers.My.
Uso público const
Que yo sepa,
C # no utiliza define pre-procesador para llevar a cabo la sustitución en el código, así que hay que utilizar una constante.
Esto debería hacer el truco:
public const int MY_NUMBER = 10;