2017-08-06 1 views
1

Ich habe einige konstante Zeichenfolgen, die in mehreren Klassen benötigt werden. Wie kann ich diese Konstanten auf eine Weise speichern und abrufen, die diese erforderlichen Kriterien erfüllt:Wo gebe ich in einer C# -Anwendung gemeinsame Konstanten ein?

  • Keine Duplizierung von Informationen.
  • Kein Funktionsaufruf zum Abrufen von Konstanten.
  • Kein Namespace-Symbol vor der Konstante (IE: Constant nicht Namespace.Constant)
  • Keine der Lösungen, die ich treffen gefunden habe bisher alle Kriterien:

    1. sie in jeder Klasse Duplizieren sie gebraucht werden in (verletzt Kriterium # 1).
    2. Speichern Sie sie in einer separaten statischen Klasse, die referenziert wird wo immer benötigt (ein bisschen wie eine C-style Header-Datei, verletzt Kriterium # 3).
    3. Setzen Sie sie in eine der Klassen, in denen sie verwendet werden, und verweisen Sie auf diese Klasse, wenn sie woanders benötigt werden (dies scheint eine schlechte Idee zu sein, da sie Zirkelverweise erstellen könnte und Kriterium 3 verletzt).
    4. Setzen Sie sie in app.config und holen Sie sie wann immer sie benötigt werden (Dies scheint Stilkonventionen zu brechen, da Nichtkonfigurationsdaten in einer Konfigurationsdatei gespeichert sind und eine Änderung der Konfigurationsdatei die Anwendungslogik zerstören könnte Kriterien # 2).
    5. Gibt es eine Lösung in C#, die alle Kriterien erfüllt?

    Antwort

    3

    Ich benutze Option # 2 oft, weil # 1 ist mit dem Risiko der verschiedenen Werte, und # 3 bricht normalerweise gesucht Klasse Kapselung. Wenn Sie Globals haben müssen. habe eine einzige Quelle der Wahrheit für sie.

    Sie den Code etwas Reiniger mit einem using alias machen:

    using static namespace.StaticClassName; 
    
    +0

    Option 2 erfordert Fremd Code, wo die Konstanten benötigt werden ('StaticClass.Constant' statt nur' Constant'). Gibt es einen Weg dahin? – slbelden

    +2

    @slbelden Wenn Sie C# 6 (VS 2014 oder neuer) verwenden, dann ja. Sie können 'static YourNamespace.StaticClass;' am Anfang Ihrer Datei verwenden. Dann werden alle statischen Member von 'StaticClass 'so ausgeführt, als ob sie für die Datei im Geltungsbereich sind. –

    +0

    Willkommen bei OOP;) Natürlich gibt es einen Weg um beides zu nutzen. In # 1 den Wert von # 2 zuweisen. Ich bevorzuge auch # 2, aber es ist hauptsächlich auf der Grundlage von Meinungen ... –

    0

    VB.Net hat Module Statement die verwendet werden können für globale Variablen, auf die zugegriffen werden kann, ohne den Namen des Moduls, aber C# Doesn Ich habe so etwas nicht. In C# verwende ich # 2, aber mit const. Auf diese Weise wird der Wert angezeigt, wenn Sie es in Visual Studio schweben:

    enter image description here

    +0

    Die Frage von OP war über C#. – TomServo

    Verwandte Themen