Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Especifica que una variable o propiedad se puede leer pero no escribir.
Observaciones
Reglas
Contexto de declaración. Solo puede usar
ReadOnlyen el nivel de módulo. Esto significa que el contexto de declaración de unReadOnlyelemento debe ser una clase, estructura o módulo, y no puede ser un archivo de origen, un espacio de nombres o un procedimiento.Modificadores combinados. No se puede especificar
ReadOnlyjunto conStaticen la misma declaración.Asignación de un valor. El código que consume una
ReadOnlypropiedad 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
ReadOnlyvariable solo 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 Const 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, sus miembros se pueden cambiar incluso si la propia variable 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 characterArray() apunta contiene "x", "y" y "z". Dado que la variable characterArray es ReadOnly, no puede cambiar su valor una vez inicializado; es decir, no puede asignarle una nueva matriz. 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 characterArray() apunta contiene "x", "M" y "z".
Tenga en cuenta que esto es similar a declarar un parámetro de procedimiento para que sea ByVal, lo que impide que el procedimiento cambie el propio argumento de llamada, pero le permite cambiar sus miembros.
Ejemplo
En el ejemplo siguiente se define una ReadOnly propiedad para la fecha en la que se contrató 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 Publicy 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 ReadOnly modificador se puede usar en estos contextos: