Frage

In C, ich könnte eine Compiler-Direktive wie folgt deklarieren:

#define MY_NUMBER 10

Doch in C #, ich erscheinen nur in der Lage sein, dies zu tun:

#define MY_NUMBER

Welche offensichtlich nutzlos in diesem Fall ist.

Ist das richtig, oder bin ich etwas falsch? Falls nicht, legt nahe, kann jemand eine Möglichkeit, dies zu tun, entweder auf Namespace oder Lösungsebene? Ich dachte an vielleicht eine statische Klasse zu schaffen, aber das scheint für einen Wert zu viel des Guten.

War es hilfreich?

Lösung

Ja, es ist richtig.

Hier ist ein Zitat aus der MSDN-Dokumentation:

  

Die Vorverarbeitung Richtlinien sehen    Fähigkeit, bedingt überspringen   Abschnitte von Quelldateien, auf Bericht   Fehler- und Warnbedingungen, und   delineate unterschiedliche Regionen der Quelle   Code . Der Begriff „Vorverarbeitung   Richtlinien werden für verwendet“   Konsistenz mit dem C und C ++   Programmiersprachen. In C # gibt es   kein separater Vorverarbeitungsschritt;   Pre-Verarbeitungsanweisungen sind   als Teil der lexikalischen verarbeiteten   Analysephase.

So Sie nicht wirklich Compiler Konstanten definieren können, wie in C und C ++.

Zugehörige Informationen:

Andere Tipps

Viele der anderen Antworten empfehlen die Verwendung eines public const Feld. Beachten Sie jedoch, dass ein public const wird in Baugruppen kompiliert werden Referenzierung es, Sie zwingen, nur neu kompilieren nicht die Versammlung es in definiert ist, sondern auch jede Montage Referenzierung es, wenn Sie jemals den Wert des const ändern.

Wenn Sie nicht sicher, dass der Wert sind nie zu ändern hat, ein public static readonly Feld ist eine bessere Alternative.

Ja, sie ist richtig. const und readonly sind wirklich Ihre einzigen Optionen.

Sie können eine konstante oder eine statische definieren nur lesbar, und wenn Sie es wollen bedingt können Sie es wickeln in einer # if-Direktive

#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif

Sie könnte wie auch Aufzählungen überprüfen, wie

enum Numbers
{
    Nothing = 0,
    Dads = 5,
    My = 10,
    LittleJims = 25
}

Also, anstelle von C ist my_number, Sie haben Numbers.My.

Mit public const


AFAIK,

C # verwendet nicht definiert Pre-Prozessor-Ersatz in Code auszuführen, so müssen Sie eine Konstante verwenden.

Das sollte es tun:

public const int MY_NUMBER = 10;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top