Diferencia entre constante y lectura

Diferencia entre constante y lectura

Es importante comprender los conceptos de programación C# antes de continuar con la implementación del código. Antes de saltar a las diferencias entre const y readonly, comprendamos primero las palabras clave y cómo se usan en un programa. Ambas son las palabras clave más comunes utilizadas en la programación de C# y básicamente para el mismo propósito. Sin embargo, ambas palabras clave son muy diferentes entre sí. Const es una palabra reservada utilizada para representar valores constantes y especifica que un valor no se puede modificar después del tiempo de compilación, mientras que Readonly es un modificador que se puede usar en los campos y cuyo valor se puede cambiar durante el tiempo de ejecución. Echemos un vistazo a algunas de las diferencias clave entre Const y Readonly.

Que es un constante?

Const se refiere a una variable constante y cuyo valor debe asignarse solo una vez, durante la declaración. Cuando la palabra clave se usa durante una declaración, se convierte en un significado constante, el valor permanece constante y no se puede cambiar durante todo el programa. Es más una palabra reservada que especifica que un valor no debe modificarse después del tiempo de compilación. Un const es implícitamente estático de forma predeterminada, por lo que se puede llamar con el nombre de la clase usando "ClassName.Nombre de la variable". Los valores constantes también se llaman como literarios. Puede ser de cualquier tipo de datos básico, como un constante constante, un constante flotante o una cadena literal.

Que es Readonly?

La palabra clave Readonly es un modificador que solo se puede usar en los campos pero no en variables locales. Un campo de lectura se puede inicializar en el momento de la declaración o dentro de un constructor en la misma clase, por lo que los valores pueden ser diferentes para diferentes ejecuciones del programa dependiendo del constructor utilizado. La palabra clave Readonly especifica que una variable de instancia de un objeto no es modificable y cualquier intento de modificarla después de que la declaración resulte en un error de compilación. La variable no se vuelve no modificable hasta después de la ejecución. Las variables se hacen lecturas solo para dejar de llamar al código que lo modifique accidentalmente después de que se construya.

Diferencia entre constante y lectura

  1. Básico

La palabra clave constante (const) no es más que variables inmutables cuyo valor solo se puede inicializar en el momento de la compilación. Estos valores constantes también se llaman como literales. Simplemente nos permite especificar si una variable es modificable o no. En términos simples, las constantes son implícitamente estáticas y deben inicializarse antes de que se usen en el programa. La palabra clave de Readonly, por otro lado, es un modificador que se puede usar en los campos y cuyo valor se puede cambiar durante el tiempo de ejecución. Evita que los campos se cambien y cuyos valores se pueden establecer a través de variables de referencia.

  1. Inicialización

Un const es estático de forma predeterminada y los valores para los cuales deben asignarse en el momento de la declaración variable, lo que significa que los valores se asignan solo en el tiempo de compilación. Se declara una constante utilizando la palabra clave "const". La inicialización de un campo constante debe ser una expresión constante y no puede modificarse. En pocas palabras, un const es una constante de tiempo de compilación. Un campo de lectura, por otro lado, solo se puede inicializar en el nivel de clase, no dentro del método y el campo no puede modificarse después de la inicialización. En otras palabras, las variables de lectura se pueden inicializar en el momento de la declaración o dentro de un constructor.

  1. Asignación de memoria

Un valor const se coloca directamente en el código, ya que actúa como reemplazo de tiempo de compilación.  El compilador coloca el valor constante en los metadatos de ensamblaje que define la constante e incrusta el valor en el código IL en sí después de la inicialización, por lo que no se requiere memoria para las constantes en tiempo de ejecución de asignación. El valor de lectura no es constante y se almacena en el cargador que se acumula la memoria para la que no se puede asignar hasta que se cargue su tipo. Los campos de lectura se almacenan en la memoria dinámica para que los valores solo se puedan obtener en tiempo de ejecución.

  1. Versiones binarias

Aunque ambas palabras clave se usan casi para el mismo propósito, tienen una semántica de versiones binarias diferentes. Cuando una expresión hace referencia a una constante, el compilador incorpora el valor en el tiempo de compilación. Entonces, si el valor se usa en un ensamblaje diferente, el ensamblaje original debe actualizarse y el valor debe cambiarse. Los cambios en el ensamblaje no se reflejan hasta que se recompensa. El valor no se obtiene hasta el tiempo de ejecución cuando una expresión hace referencia a un campo de lectura. Si el valor se cambia en un ensamblaje diferente, los cambios se reflejan en el ensamblaje tan pronto como se carga sin necesidad de recompilarlo.

Const vs. Readonly: cuadro de comparación

Resumen de const vs. Solo lectura

Ambas palabras clave se usan para lo mismo que es declarar un miembro para que los valores no sean cambios en todo el programa. Sin embargo, la palabra clave const es muy diferente de la palabra clave de readonly. Const es una variable constante cuyo valor debe inicializarse en el tiempo de compilación, mientras que un campo de lectura solo se puede inicializar a nivel de clase, ya sea en el momento de la declaración o dentro del constructor. Const es una constante de tiempo de compilación, mientras que los campos de lectura son de solo lectura. Se pueden acceder a las variables de Constance utilizando "ClassName.VariAblename ", mientras que se pueden acceder a las variables readonlamente utilizando" instanceName.Nombre de la variable". Además, las variables const se pueden declarar en métodos, mientras que los campos de lectura no se pueden declarar en métodos.