Einleitung: Eine ewige Debatte, die nicht an Aktualität verliert
Stellen Sie sich vor: Sie schreiben Code in C# und müssen einen Wert deklarieren, der sich nicht ändern soll. Der erste Gedanke ist const. Der zweite ist static readonly. Und der dritte: „Was ist eigentlich der Unterschied?“.
Diese Frage ist eine der beliebtesten auf Stack Overflow. Tausende Entwickler, vom Anfänger bis zum Senior, diskutieren weiterhin, was besser ist. Und im Jahr 2025, mit der Veröffentlichung neuer Versionen von .NET und C# 13, ist diese Wahl noch interessanter geworden.
In diesem Artikel klären wir ein für alle Mal, wann man const und wann static readonly verwendet. Sie erfahren nicht nur die Theorie, sondern erhalten auch klare Regeln, die Sie noch heute anwenden können.
Was verbirgt sich hinter den Modifikatoren?
const: Die starre Konstante
Der Modifikator const in C# ist buchstäblich ein „in Stein gemeißelter“ Wert. Er muss zum Zeitpunkt der Kompilierung bekannt sein. Der Compiler setzt den Wert der Konstante direkt überall dort in den Code ein, wo sie verwendet wird.
public class MathConstants{ public const double Pi = 3.14159; public const int DaysInWeek = 7; public const string AppName = "MyApp";}Beachten Sie: const ist immer implizit static. Sie können nicht static const schreiben – der Compiler gibt einen Fehler aus.
static readonly: Flexible Unveränderlichkeit
Der Modifikator static readonly ist ein Feld, das einmal initialisiert wird und sich danach nicht mehr ändert. Der Hauptunterschied: Der Wert kann zur Laufzeit des Programms berechnet werden.
public class AppSettings{ public static readonly DateTime ReleaseDate = new DateTime(2025, 1, 15); public static readonly Guid InstanceId = Guid.NewGuid(); public static readonly string ConfigPath = GetConfigPath(); private static string GetConfigPath() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "config.json"); }}Wesentliche Unterschiede: Tabelle zum schnellen Vergleich
Lassen Sie uns alles in einer übersichtlichen Tabelle darstellen:
| Eigenschaft | const | static readonly |
|---|---|---|
| Initialisierungszeitpunkt | Kompilierung | Ausführung (statischer Konstruktor) |
| Zulässige Typen | Nur primitive Typen (int, double, string, enum, bool) | Beliebige Typen (einschließlich Referenztypen) |
| Speicher | Wert wird in jede Assembly kopiert | Einheitlicher Verweis im Speicher |
| Versionskompatibilität | Probleme bei der Aktualisierung von Bibliotheken | Sicher |
| Leistung | Maximal (Einsetzung zur Kompilierzeit) | Geringer Overhead beim ersten Zugriff |
Wann wählt man const?
Verwenden Sie const, wenn:
- Der Wert absolut unveränderlich ist – mathematische Konstanten (π, e), Anzahl der Tage in einer Woche, physikalische Konstanten.
- Der Wert zur Kompilierzeit verfügbar sein muss – z. B. für Attribute, switch/case, Standardparameter.
- Sie den gesamten Code kontrollieren – und sicher sind, dass die Bibliothek nicht separat aktualisiert wird.
// Ideal für constpublic class Physics{ public const double SpeedOfLight = 299792458; // m/s public const double GravitationalConstant = 6.67430e-11; // m³/(kg·s²)}
// Verwendung in einem Attribut —