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 elemento ReadOnly 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 con Static 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:

Consulte también