Una diferencia sutil pero crucial es que consts
se evalúan en tiempo de compilación, mientras que statics
se evalúan en tiempo de ejecución. Esto tiene un impacto importante en el control de versiones. Por ejemplo, supongamos que escribe:
public const int MaxValue = 100;
Compila y envía su conjunto (Ensamblaje A). Luego, alguien más escribe un ensamblaje (Ensamblaje B) que hace referencia a MaxValue. En este caso, el valor 100 se compila en su conjunto y en el suyo.
Si hubiera escrito esto:
public static readonly int MaxValue = 100;
entonces la referencia en su montaje quedaría sólo eso, una referencia. Cuando alguien ejecutó el ensamblaje B, se cargará el valor 100 desde su ensamblaje, ensamblaje A.
Esto puede, por ejemplo, afectar escenarios de aplicación de parches simples.Si emite un Ensamblaje A actualizado donde MaxValues se declara como 200 y el usuario copia esa versión sobre la versión anterior (pero no recompila el Ensamble B), entonces en el primer escenario el Ensamble B continuará operando como si MaxValues fuera 100, porque ese es el valor const
que se compiló en el Ensamble B. En el segundo escenario, el Ensamblado B recogerá el nuevo valor porque carga la variable no const static
en tiempo de ejecución.
No hay tal cosa const variable. –