Une différence subtile mais cruciale est que consts
sont évalués au moment de la compilation, tandis que statics
sont évalués au moment de l'exécution. Cela a un impact important sur le versionnement. Par exemple, supposons que vous écrivez:
public const int MaxValue = 100;
Vous compilez et expédiez votre assembly (Assembly A). Ensuite, quelqu'un d'autre écrit un assembly (Assembly B) qui référence MaxValue. Dans ce cas, la valeur 100 est compilée dans leur assemblage ainsi que le vôtre.
Si vous aviez écrit ceci:
public static readonly int MaxValue = 100;
alors la référence dans leur assemblée resterait juste que, une référence. Lorsque quelqu'un exécutait l'assembly B, la valeur 100 était chargée à partir de votre assembly, Assembly A.
Cela peut, par exemple, affecter des scénarios de correction simples.Si vous émettez un Assembly A mis à jour où MaxValues est déclaré comme 200, et que l'utilisateur copie cette version sur la version précédente (mais ne recompile pas l'Assembly B), alors dans le premier scénario, l'Assembly B continuera à fonctionner comme si MaxValues étaient 100, car c'est la valeur const
qui a été compilée dans l'assembly B. Dans le second scénario, l'assembly B récupère la nouvelle valeur car elle charge la variable static
non const au moment de l'exécution.
Il n'existe pas de variable const. –