ReadOnly (Visual Basic)
Especifica que se puede leer una variable o propiedad, pero que no se puede escribir en ella.
Comentarios
Reglas
Contexto de declaración. Solo se puede usar
ReadOnly
en un nivel de módulo. Esto significa que el contexto de declaración de un elementoReadOnly
debe ser una clase, una estructura o un módulo y no puede ser un archivo de código fuente, un espacio de nombres o un procedimiento.Modificadores combinados. No es posible especificar
ReadOnly
junto conStatic
en la misma declaración.Asignación de un valor. El código que consume una propiedad
ReadOnly
no puede establecer su valor. Pero el código que tiene acceso al almacenamiento subyacente puede asignar o cambiar el valor en cualquier momento.Solo puede asignar un valor a una variable
ReadOnly
en su declaración o en el constructor de una clase o estructura en la que se define.
Cuándo usar una variable ReadOnly
Hay situaciones en las que no se puede usar una instrucción Const para declarar y asignar un valor constante. Por ejemplo, es posible que la instrucción Const
no acepte el tipo de datos que desea asignar o puede que no sea posible calcular el valor en tiempo de compilación con una expresión constante. Es posible que ni siquiera conozca el valor en tiempo de compilación. En estos casos, puede usar una variable ReadOnly
para contener un valor constante.
Importante
Si el tipo de datos de la variable es un tipo de referencia, como una instancia de clase o matriz, sus miembros se pueden cambiar incluso si la variable misma es ReadOnly
. Esto se ilustra en el siguiente ejemplo:
ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub ChangeArrayElement()
characterArray(1) = "M"c
End Sub
Cuando se inicializa, la matriz a la que apunta characterArray()
contiene "x", "y" y "z". Dado que la variable characterArray
es ReadOnly
, no puede cambiar su valor una vez que se inicializa; es decir, no puede asignarle una matriz nueva. Sin embargo, puede cambiar los valores de uno o varios de los miembros de la matriz. Después de una llamada al procedimiento ChangeArrayElement
, la matriz a la que apunta characterArray()
contiene "x", "M" y "z".
Observe que esto es similar a declarar que un parámetro de procedimiento sea ByVal, lo que impide que el procedimiento cambie el argumento de llamada mismo, pero le permite cambiar sus miembros.
Ejemplo
En el ejemplo siguiente, se define una propiedad ReadOnly
para la fecha en la que se contrató un empleado. La clase almacena el valor de propiedad de manera interna como una variable Private
y solo el código dentro de la clase puede cambiar ese valor. Sin embargo, la propiedad es Public
y cualquier código que pueda acceder a la clase puede leer la propiedad.
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
El modificador ReadOnly
se puede utilizar en los contextos siguientes: