ReadOnly (Visual Basic)
Especifica que una variable o propiedad se puede leer pero no escribir.
Comentarios
Reglas
Contexto de declaración. Solo se puede usar
ReadOnlyen un nivel de módulo. Esto significa que el contexto de declaración de un elemento debe ser una clase, estructura o módulo, y no puede ser un archivo de código fuente, un espacio deReadOnlynombres o un procedimiento.Modificadores combinados. No se puede
ReadOnlyespecificar junto con en la mismaStaticdeclaración.Asignar un valor. El código que consume
ReadOnlyuna 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 variable solo en su declaración o en el constructor de una clase o
ReadOnlyestructura 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 no acepte el tipo de datos que desea asignar o que no pueda calcular el valor en tiempo de compilación con Const 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 apunta characterArray() contiene "x", "y" y "z". Dado que la variable es , no se puede cambiar su valor una vez inicializada; es decir, no se le puede asignar characterArray ReadOnly 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 , la matriz a la que apunta ChangeArrayElement characterArray() contiene "x", "M" y "z".
Tenga en cuenta que esto es similar a declarar un parámetro de procedimiento como 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 ReadOnly define una propiedad para la fecha en que se contrató a un empleado. La clase almacena el valor de propiedad internamente como una variable y solo el código dentro de Private 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: