Dicen que la diferencia entre readonly y const es que const es tiempo de compilación (mientras que readonly es tiempo de ejecución). Pero, ¿qué significa exactamente eso, el hecho de que sea tiempo de compilación? Todo se compila en el código de bytes ¿no?¿Qué significa tiempo de compilación 'const'?
Respuesta
Simplemente significa que cada instancia del miembro marcado como const
se reemplazará por su valor durante la compilación, mientras que los miembros de solo lectura se resolverán en tiempo de ejecución.
A const solo se puede definir durante su declaración. Un readonly se puede definir durante su declaración o en un constructor. Entonces, una variable readonly puede tener valores diferentes según el constructor utilizado para inicializarlo.
Normalmente, una "constante de tiempo de compilación" se refiere a un valor literal constante que el compilador resolvería. El código que genera el compilador tendrá el valor de intervalo disponible como un operando inmediato, en lugar de tener que cargarlo desde la memoria.
Significa que las variables const se escriben en la ubicación a la que se hace referencia. Así, supongamos que tiene un 2 bibliotecas, una con una variable const
:
// Library A
const int TEST = 1;
// Library B
void m()
{
Console.WriteLine(A.TEST);
}
La variable se escribe realmente, en tiempo de compilación, en B. La diferencia es que, si vuelve a compilar A pero no B, B tendrá el valor "antiguo". Esto no sucederá con las variables readonly
.
Aunque la respuesta que proporcionó Julio es válida a partir de los efectos de establecer una variable como constante o de solo lectura, hay una gran diferencia entre las dos declaraciones.
Si bien muchas personas simplemente afirman que es obvio que el valor de una constante se resuelve en las compilaciones, mientras que un valor de solo lectura se resolverá solo durante el tiempo de ejecución, el punto principal reside donde se solicita la referencia.
Dependiendo del tipo de datos de la constante, será reemplazado en la evocación del comando, o almacenado en el HEAP
y referenciado por un puntero.
Por ejemplo, el código:
const int x = 3;
int y = 3 * x;
puede ser resuelta en el tiempo de compilación como simplemente:
int y = 3 * 3;
Por otro lado, un campo de sólo lectura es siempre almacenada en el STACK
y referenciado por un puntero.
Una de las consecuencias del tiempo de compilación const es que los cambios en el const en un ensamblaje no se recogen automáticamente por otros ensamblajes sin recompilarlos todos.
Ej:
- Asamblea A tiene public const int = 10
- Asamblea B se refiere a la const.
- Ambos compilados. Ahora el conjunto A const cambió a 20, se volvió a implementar.
- Conjunto B no recompilado.
En tiempo de ejecución, la Asamblea B piensa que el valor de la const sigue siendo 10, no 20.
Si se tratara de sólo lectura, que recogería el nuevo valor.
- 1. ¿Qué significa @const en JavaScript?
- 2. ¿Qué significa "clase const"?
- 3. ¿Qué significa esto const int * & var?
- 4. ¿Qué significa "const void *" en memmove?
- 5. ¿Qué significa const después de una firma de función/método?
- 6. ¿Por qué Dart tiene constantes de tiempo de compilación?
- 7. ¿Qué significa 'inicialización no válida de referencia no const'?
- 8. ¿Qué significa decir que los patrones int enum son constantes de tiempo de compilación?
- 9. Constantes de matriz en tiempo de compilación
- 10. ¿Qué significa el error en tiempo de compilación "Símbolos no definidos para la arquitectura x86_64"?
- 11. Terminología Java: ¿Por qué error en tiempo de compilación y no excepción en tiempo de compilación?
- 12. ¿Qué significa el error de compilación del "error de coincidencia"?
- 13. ¿Cómo usar 'ref' en tiempo de compilación?
- 14. offsetof en tiempo de compilación
- 15. ¿Qué significa la permutación de compilación en GWT?
- 16. En github, ¿qué significa el estado de compilación?
- 17. if/else en tiempo de compilación?
- 18. ¿Qué significa Field.Index.NOT_ANALYZED_NO_NORMS significa
- 19. ¿Qué significa "escalares filtrados: 1" significa?
- 20. Tiempo de compilación de perfiles
- 21. const CFoo & bar() const
- 22. ¿Es eficaz el tiempo de compilación "strlen()"?
- 23. ¿Qué nombres de directorios '.' y '..' significa y ¿qué significa faDirectory?
- 24. Constantes y variables de tiempo de compilación
- 25. Objetivo C const NSString * vs NSString * const
- 26. ¿Qué significa ('../') significa?
- 27. C++: Significado de const char * const *
- 28. ¿Qué significa "babosa" significa
- 29. ¿Qué significa "&" en C++?
- 30. C# Compilación de tiempo de compilación para las constantes de cadena
fácil de entender la respuesta es lo que estaba buscando. gracias – foreyez
También significa que las variables 'const' están limitadas a valores que pueden expresarse como literales en tiempo de compilación, sin objetos complejos. –