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.

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top