Static readonly ou const en C# : que choisir en 2025 ?

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : un débat éternel qui reste d'actualité

\n\n

Imaginez la situation : vous écrivez du code en C# et vous devez déclarer une valeur qui ne doit pas changer. La première pensée — const. La seconde — static readonly. Et la troisième — « Mais quelle est la différence, au juste ? ».

\n\n

Cette question est l'une des plus populaires sur Stack Overflow. Des milliers de développeurs, des débutants aux seniors, continuent de débattre de ce qui est le mieux. Et en 2025, avec la sortie des nouvelles versions de .NET et de C# 13, ce choix est devenu encore plus intéressant.

\n\n

Dans cet article, nous allons une fois pour toutes clarifier quand utiliser const et quand utiliser static readonly. Vous apprendrez non seulement la théorie, mais vous obtiendrez également des règles claires que vous pourrez appliquer dès aujourd'hui.

\n\n

Que se cache-t-il derrière les modificateurs ?

\n\n

const : une constante rigide

\n

Le modificateur const en C# est littéralement une valeur « gravée dans la pierre ». Elle doit être connue au moment de la compilation. Le compilateur substitue directement la valeur de la constante dans le code partout où elle est utilisée.

\n\n
public class MathConstants\n{\n    public const double Pi = 3.14159;\n    public const int DaysInWeek = 7;\n    public const string AppName = "MyApp";\n}
\n\n

Notez que const est toujours implicitement static. Vous ne pouvez pas écrire static const — le compilateur générera une erreur.

\n\n

static readonly : une immuabilité flexible

\n

Le modificateur static readonly est un champ qui est initialisé une seule fois et ne change plus. La principale différence : la valeur peut être calculée pendant l'exécution du programme.

\n\n
public class AppSettings\n{\n    public static readonly DateTime ReleaseDate = new DateTime(2025, 1, 15);\n    public static readonly Guid InstanceId = Guid.NewGuid();\n    public static readonly string ConfigPath = GetConfigPath();\n    \n    private static string GetConfigPath()\n    {\n        return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "config.json");\n    }\n}
\n\n

Différences clés : tableau de comparaison rapide

\n\n

Mettons tout en ordre dans un tableau clair :

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Caractéristiqueconststatic readonly
Moment d'initialisationCompilationExécution (constructeur statique)
Types autorisésUniquement les types primitifs (int, double, string, enum, bool)Tous les types (y compris les types référence)
MémoireLa valeur est copiée dans chaque assemblyRéférence unique en mémoire
Compatibilité des versionsProblèmes lors de la mise à jour des bibliothèquesSécurisé
PerformanceMaximale (substitution à la compilation)Léger surcoût lors du premier accès
\n\n

Quand choisir const ?

\n\n

Utilisez const lorsque :

\n
    \n
  • La valeur est absolument immuable — constantes mathématiques (π, e), nombre de jours dans une semaine, constantes physiques.
  • \n
  • La valeur doit être disponible à la compilation — par exemple, pour les attributs, switch/case, paramètres par défaut.
  • \n
  • Vous contrôlez l'intégralité du code — et vous êtes sûr que la bibliothèque ne sera pas mise à jour séparément.
  • \n
\n\n
// Idéal pour const\npublic class Physics\n{\n    public const double SpeedOfLight = 299792458; // m/s\n    public const double GravitationalConstant = 6.67430e-11; // m³/(kg·s²)\n}\n\n// Utilisation dans un attribut —                

Blogs

Book Recommendations