ReadOnly (Visual Basic)

Especifica que una variable o una propiedad se puede leer pero no escribir.

Observaciones

Reglas

  • Contexto de declaración. Solo se puede usar ReadOnly en un nivel de módulo. Esto significa que el contexto de la declaración de un ReadOnly elemento 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 se puede especificar ReadOnly junto con Static en la misma declaración.

  • Asignación de un valor. El código que consume una ReadOnly propiedad no puede establecer su valor. Pero el código que tiene acceso al almacenamiento subyacente puede asignar o cambiar el valor en cualquier momento.

    Puede asignar un valor a una ReadOnly variable solo en su declaración o en el constructor de una clase o estructura en la que se define.

Cuándo usar una variable de solo lectura

Hay situaciones en las que no se puede usar una instrucción const para declarar y asignar un valor constante. Por ejemplo, Const es posible que la instrucción no acepte el tipo de datos que desea asignar o que no pueda 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 ReadOnly variable para contener un valor constante.

Importante

Si el tipo de datos de la variable es un tipo de referencia, como una matriz o una instancia de clase, se pueden cambiar sus miembros aunque la propia variable sea 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 señala characterArray() contiene "x", "y" y "z". Dado que la variable characterArray es ReadOnly , no se puede cambiar su valor una vez inicializado; es decir, no se puede asignar una nueva matriz a ella. 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 señala characterArray() contiene "x", "M" y "z".

Tenga en cuenta que esto es similar a declarar un parámetro de procedimiento como ByVal, lo que evita que el procedimiento cambie el argumento de llamada en sí, pero permite cambiar sus miembros.

Ejemplo

En el ejemplo siguiente se define una ReadOnly propiedad para la fecha en la que se contrató a un empleado. La clase almacena el valor de propiedad internamente como una Private variable 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 tener acceso 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:

Vea también