Const Vs Readonly

CONST vs READONLY en C#? (Explicación en 3 minutos)

Dotnetsafer
Dotnetsafer

¿Quién no tiene dudas al comenzar a aprender algo nuevo? 🤔

Todo el mundo

En este caso, cuando alguien comienza a programar en .NET , suele hacerse una pregunta que incluso muchos Senior developers no saben cómo responder correctamente:

  • ¿Cuáles son las diferencias entre READONLY y CONST?
  • ¿Son iguales?
  • Si se entiende que una variable solo se puede leer y no cambiar… ¿Se le puede aplicar la definición de constante?

Te respondo:

NO ❌

Está bien, pero… Si no son iguales… ¿Cuál es su diferencia?

Desde Dotnetsafer te contamos la diferencia

Bueno, comencemos con lo básico:

Al principio pueden parecer iguales si tenemos en cuenta que las salidas son similares, pero debemos entender las diferencias reales entre ellas ya que si no las usamos bien podríamos tener muchos problemas en nuestros proyectos.


1. Readonly

Para definir una constante en C # usaremos esto 👇

Con el modificador const le decimos al compilador que la variable que estamos asignando será una constante . De esta forma, solo se puede inicializar cuando se declara.

Si queremos modificarlo, el compilador nos dirá que no y nos mostrará este error:

Comparación de Const y Readonly en C#

En el caso de definir una variable de Readonly , es similar 👇

Y de nuevo, si intentamos modificarlo, nos volverá a dar un error, pero no el mismo:

Comparación de Const y Readonly en C#

✅ Conclusión:

Aunque los dos nos hemos dado errores, no ha sido lo mismo. En este caso, la diferencia es que las clases de Readonly PUEDEN modificarse, siempre y cuando no se ejecute el constructor de esa clase.

¿Qué quise decir con eso?

Simplemente estando dentro del constructor podemos modificarlos si queremos, por ejemplo, obtener su valor de los parámetros que le pasamos al constructor. Y no, eso no es posible en el caso de la constante .


2. Miembros estáticos

La segunda diferencia más notable es que una constante es SIEMPRE un miembro estático de la clase a la que pertenece.

Volvamos a la práctica, si escribimos:

Y luego intentamos acceder al valor de PI, no sería necesario crear un nuevo objeto de la clase, es decir 👇

No necesitaríamos instanciar nada en ningún momento, ya que es un miembro estático, común con los otros objetos de esa clase y claramente existente en su definición.

Si queremos hacer lo mismo con una variable de Readonly , tendríamos que agregar el modificador estático. Se vería así 👇

Entonces podríamos usarlo de la misma manera que la constante .


3. Compilación

¿Está todo claro en este momento? 🤗

Ahora vamos a “profundizar” un poco más.

Supongamos que tenemos una clase básica definida así:

Básicamente, como en el primer ejemplo, definimos una sola clase con los dos miembros estáticos 👇

  • Readonly Pi
  • Const Pi

Generamos un .dll para que podamos usarlo en otras aplicaciones.

Ahora, creamos un nuevo proyecto y agregamos una referencia a la DLL creada anteriormente. Y solo mostramos una salida en pantalla como aquí:

Si ejecutamos esto, el resultado será 👇

Constant y readonly en C#

Está bien, está bien, ¿verdad?

Ahora imaginemos que compilamos y enviamos nuestra nueva aplicación de consola a nuestros clientes.

Ohh, espera, el valor de PI es más largo… 😰

De acuerdo, simplemente cambiamos el código DLL , lo compilamos y se lo enviamos

Simplemente sería necesario sobrescribir la nueva DLL con la anterior y todo funcionaría sin ningún problema. Pero … Ejecutemos el programa de nuevo con la nueva DLL. Se bloqueará como la pantalla azul de Windows 10👇


Comparación de Constant y readonly en C#

Solo se ha cambiado el valor de la variable Readonly y no la constante.

Si examinamos el código generado con un descompilador, encontraremos esto 👇

Ejemplo de Const y Readonly en C#

Con esto podemos darnos cuenta de que, aunque sea miembro de una clase que pertenece a una DLL externa, las constantes se compilan literalmente.

✅ Esto es MUY simple de explicar:

Cuando el compilador analiza el código, viendo que estamos usando una constante y no se puede cambiar , simplemente lo cambia al valor real en todos los lados, incluso si lo compilamos con una DLL externa.

En el caso de las variables de Readonly, podemos ver que todavía se usa desde la DLL.

En este punto llegamos al problema principal que puede encontrar. Si declaras una variable Readonly y quieres cambiar su valor, sobrescribir la DLL no funciona, tendrás que compilar todas las aplicaciones que la utilicen nuevamente.


Finalmente, espero que con este artículo haya aclarado las diferencias más importantes entre las variables de Readonly y las constantes.

Pudiendo así evitar posibles problemas y algunas compilaciones más, que creo que ya perdemos mucho tiempo en ello. 🤗

Summary
CONST vs READONLY en C#? (Explicación)
Article Name
CONST vs READONLY en C#? (Explicación)
Description
¿Cuáles son las diferencias entre READONLY y CONST? ¿Son iguales? Te explico la diferencia entre READONLY y CONST en menos de 5 minutos
Author
Publisher Name
Dotnetsafer
Publisher Logo

0 Comments

Leave a Reply

More great articles

top 5 tools part 2

TOP 5 + 1 herramientas para cualquier desarrollador de .NET (Parte 2)

Como ya vimos en el anterior artículo Top 5 tools for any .NET developer mostramos las más destacadas de Visual…

Read Story
Consejos de seguridad para .NET

Seguridad para aplicaciones .NET – 5 consejos a seguir

A la hora de programar uno de los aspectos que debemos tener en cuenta es la seguridad de nuestro código,…

Read Story
cross site scripting

Cross-Site Scripting (XSS) (3 consejos para prevenirlo)

👨‍💻Qué es Cross Site Scripting (XSS) Cross Site Scripting (XSS) es una vulnerabilidad que permite a un atacante inyectar scripts…

Read Story
Arrow-up