En el nivel más alto, si queremos diferenciar las palabras clave de sólo lectura y de la const . Podríamos decir que la diferencia radica en cuando el valor de la variable se conoce a lo largo del ciclo de vida de la aplicación. Para la palabra clave de sólo lectura , el último valor se conoce por el tiempo de ejecución . Para la palabra clave const , el valor debe ser conocido por el tiempo de compilación. Lo común de estas dos palabras clave es que ambas cubren tipos de datos inmutables, lo que significa que el valor no puede cambiar a lo largo de la vida de la aplicación.
Para la palabra clave de la const , la variable marcada como tal es colocada por el compilador en los metadatos del ensamblador que define la constante y los metadatos e incrusta el valor en el código IL después de la inicialización. Esto significa que no hay asignación de memoria para las constantes durante el tiempo de ejecución. Bajo el capó, el valor de sólo lectura no es una constante; se almacena en el montón de cargadores, que es un tipo de memoria que no puede asignarse hasta que se carga el tipo. Los campos de sólo lectura se almacenan en la memoria dinámica, los valores son accesibles sólo en tiempo de ejecución.
A pesar de ser muy similares, estas palabras clave utilizan diferentes versiones binarias. Cuando una expresión hace referencia a una constante específica, el compilador incrusta el valor en tiempo de compilación. Esto significa que. si el valor se utiliza en un ensamblaje diferente, el original debe ser actualizado y el valor cambiado. Los cambios en el ensamblaje no se reflejan hasta que se recompila. Cuando una expresión hace referencia a un campo de sólo lectura , el valor no se obtiene hasta el tiempo de ejecución. Los cambios en el valor se reflejan inmediatamente, el ensamblaje no necesita ser recompilado.