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.

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top