Ein subtiler, aber entscheidender Unterschied ist, dass consts
werden zur Kompilierzeit ausgewertet, während statics
werden zur Laufzeit ausgewertet. Dies hat erhebliche Auswirkungen auf die Versionierung. Nehmen wir zum Beispiel an, Sie schreiben:
public const int MaxValue = 100;
Sie kompilieren und versenden Ihre Baugruppe (Baugruppe A). Dann schreibt jemand anderes eine Baugruppe (Baugruppe B), die auf MaxValue verweist. In diesem Fall wird der Wert 100 sowohl in ihrer als auch in Ihrer Assembly kompiliert.
Wenn Sie das geschrieben hätten:
public static readonly int MaxValue = 100;
dann bliebe der Verweis in ihrer Baugruppe genau das: ein Verweis. Wenn jemand Baugruppe B ausführt, wird der Wert 100 aus su Baugruppe, Baugruppe A.
Dies kann zum Beispiel einfache Parcheando-Szenarien betreffen. Wenn Sie eine aktualisierte Baugruppe A herausgeben, in der MaxValues als 200 deklariert ist, und der Benutzer diese Version über die vorherige Version kopiert (aber Baugruppe B nicht neu kompiliert), dann wird im ersten Szenario Baugruppe B weiterhin so arbeiten, als ob MaxValues 100 wäre, weil das die const
Wert, der in die Baugruppe B kompiliert wurde. Im zweiten Szenario übernimmt die Baugruppe B den neuen Wert, weil sie die nicht-konstante static
Variable zur Laufzeit.