#Define Compiler Richtlinie in C #
-
26-09-2019 - |
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.
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;