Constante y solo lectura

Anonim

Es importante comprender los conceptos de la programación en C # antes de continuar con la implementación del código. Antes de saltar a las diferencias entre const y readonly, primero entendamos las palabras clave y cómo se utilizan en un programa. Ambas son las palabras clave más 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 que se usa 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 puede usarse en 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.

¿Qué es una const?

Const se refiere a una variable constante y el valor de la cual debe asignarse solo una vez, durante la declaración. Cuando se utiliza la palabra clave const durante una declaración, se convierte en una constante, lo que significa que el valor permanece constante y no se puede cambiar en todo el programa. Es más una palabra reservada que especifica que un valor no debe modificarse después del tiempo de compilación. Una constante es implícitamente estática por defecto, por lo que puede llamarse con el nombre de la clase usando "Classname.VariableName". Los valores constantes también se denominan como literales. Puede ser de cualquier tipo de datos básicos, como una constante entera, una constante flotante o una cadena literal.

¿Qué es ReadOnly?

La palabra clave Readonly es un modificador que se puede usar solo en campos pero no en variables locales. Un campo de solo lectura puede inicializarse 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 la declaración produce un error de compilación. La variable no se convierte en no modificable hasta después de la ejecución. Las variables se hacen solo para evitar que el código se modifique accidentalmente una vez construido.

Diferencia entre constante y solo lectura

  1. BASIC

La palabra clave constante (const) no es más que variables inmutables cuyo valor solo puede inicializarse en el momento de la compilación. Estos valores constantes también se denominan 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 utilicen en el programa. La palabra clave de solo lectura, 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 se cambien los campos y los valores de los cuales se pueden establecer a través de variables de referencia.

  1. Inicialización

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

  1. Asignación de memoria

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

  1. Versiones Binarias

Aunque ambas palabras clave se usan casi para el mismo propósito, tienen diferentes semánticas de versionamiento binario. Cuando una expresión hace referencia a una constante, el compilador incrusta el valor en tiempo de compilación. Por lo tanto, si el valor se utiliza en un conjunto diferente, el conjunto original debe actualizarse y el valor debe cambiarse. Los cambios en el ensamblaje no se reflejan hasta que se vuelve a compilar. El valor no se obtiene hasta el tiempo de ejecución cuando una expresión hace referencia a un campo de solo lectura. Si el valor se cambia en un ensamblaje diferente, los cambios se reflejarán en el ensamblaje tan pronto como se cargue sin necesidad de volver a compilarlo.

Const vs. Readonly: Cuadro comparativo

Resumen de Const vs. Readonly

Ambas palabras clave se utilizan para lo mismo que es declarar un miembro para que los valores no puedan modificarse en todo el programa. Sin embargo, la palabra clave const es muy diferente de la palabra clave readonly. Const es una variable constante cuyo valor se debe inicializar en el momento de la compilación, mientras que un campo de solo lectura solo se puede inicializar en el 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 solo lectura son de solo lectura. Se puede acceder a las variables de Constanza usando "Classname.VariableName", mientras que las variables de solo lectura se pueden acceder usando "InstanceName.VariableName".Además, las variables const pueden declararse en métodos, mientras que los campos de solo lectura no pueden declararse en métodos.