Hoy me sorprendí un poco cuando cambié el valor de una constante públicamente visible en una clase estática y luego reemplacé una copia anterior del ensamblado con la versión compilada recientemente. La sorpresa fue que el programa existente que hacía referencia al ensamblado no captaba el nuevo valor de la constante. Es decir, no volví a compilar el ejecutable, sino que simplemente reemplacé ese ensamblaje.En .NET, ¿por qué las constantes se evalúan en tiempo de compilación en lugar de en tiempo JIT?
Una descripción completa de mi experimento es en How constant is a constant?
voy a admitir a ser muy sorprendido por este comportamiento. Entiendo lo que está pasando, pero no entiendo por qué. ¿Existe alguna razón técnica particular por la que las constantes no puedan ser recogidas en el momento de JIT en lugar de en tiempo de compilación? ¿Hay casos en que hacer eso podría romper las cosas?
Este es un comportamiento discutido en muchos libros, blogs, por lo que no es de extrañar que, de hecho :) –
@lex: Curiosamente, me Nunca me encontré con una discusión sobre esto antes. Todavía me pregunto * por qué *, sin embargo. –
Todavía no entiendo cuál es la ventaja de hornearlo en el ensamblaje de uso. – CodesInChaos