Visual Basic admite dos formas principales de declarar valores inmutables: Const y ReadOnly. Const está destinado a constantes de compilación, cuyo valor se conoce en el momento de la compilación. ReadOnly permite la inicialización solo en el momento de la declaración o en el constructor y mantiene la inmutabilidad durante la ejecución.
Históricamente, desde VB6 y antes, esta semántica ayudaba a evitar números mágicos y facilitaba el mantenimiento. En VB.NET, las capacidades se ampliaron con la introducción de ReadOnly para campos de instancia y de clase.
Si se utiliza Const para valores que se determinan en tiempo de ejecución o dependen de datos externos, pueden surgir errores. Los ámbitos de visibilidad confusos también conducen a errores.
Utilice Const para valores simples e inmutables (números, cadenas) que se conocen en el momento de la compilación y ReadOnly para casos donde el valor se puede calcular en el constructor, pero después es solo de lectura.
Ejemplo de código:
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
Características clave:
¿Se puede declarar Const para un valor obtenido en tiempo de ejecución (por ejemplo, de un archivo)?
No, Const requiere un valor en el momento de la compilación. Para la inicialización en tiempo de ejecución, se debe usar ReadOnly.
¿Puede cambiarse un campo ReadOnly después del constructor?
No, el cambio solo es posible en el momento de la inicialización (ya sea en la declaración o en el constructor), después está disponible solo para lectura.
¿Se debe utilizar Const para números float/double en cálculos matemáticos?
Sí, si el valor se conoce de antemano. Pero al usarlo en otros ensamblajes, cambiar el valor de Const requerirá recompilar todos los módulos dependientes, ya que el compilador incrusta el valor directamente.
Un desarrollador declaró Const para la ruta a una carpeta que luego debía ser cambiada en diferentes entornos (dev/prod). Como resultado, al cambiar la carpeta, se necesitó recompilar todos los proyectos que usaban esta Const.
Ventajas:
Desventajas:
Implementamos ReadOnly para rutas, inicializándolo en el constructor teniendo en cuenta la configuración del entorno. Los valores son fáciles de modificar a través de la configuración sin recompilar toda la aplicación.
Ventajas:
Desventajas: