ReadOnly (Visual Basic)ReadOnly (Visual Basic)

Especifica que una variable o una propiedad se puede leer pero no escribir.Specifies that a variable or property can be read but not written.

ComentariosRemarks

ReglasRules

  • Contexto de declaración.Declaration Context. Solo se puede usar ReadOnly en un nivel de módulo.You can use ReadOnly only at module level. Esto significa que el contexto de la 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.This means the declaration context for a ReadOnly element must be a class, structure, or module, and cannot be a source file, namespace, or procedure.

  • Modificadores combinados.Combined Modifiers. No se puede especificar ReadOnly junto con Static en la misma declaración.You cannot specify ReadOnly together with Static in the same declaration.

  • Asignación de un valor.Assigning a Value. El código que consume una propiedad ReadOnly no puede establecer su valor.Code consuming a ReadOnly property cannot set its value. Pero el código que tiene acceso al almacenamiento subyacente puede asignar o cambiar el valor en cualquier momento.But code that has access to the underlying storage can assign or change the value at any time.

    Puede asignar un valor a una variable ReadOnly solo en su declaración o en el constructor de una clase o estructura en la que se define.You can assign a value to a ReadOnly variable only in its declaration or in the constructor of a class or structure in which it is defined.

Cuándo usar una variable de solo lecturaWhen to Use a ReadOnly Variable

Hay situaciones en las que no se puede usar una instrucción const para declarar y asignar un valor constante.There are situations in which you cannot use a Const Statement to declare and assign a constant value. Por ejemplo, la instrucción Const podría no aceptar el tipo de datos que desea asignar, o puede que no pueda calcular el valor en tiempo de compilación con una expresión constante.For example, the Const statement might not accept the data type you want to assign, or you might not be able to compute the value at compile time with a constant expression. Es posible que ni siquiera conozca el valor en tiempo de compilación.You might not even know the value at compile time. En estos casos, puede usar una variable @no__t 0 para contener un valor constante.In these cases, you can use a ReadOnly variable to hold a constant value.

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.If the data type of the variable is a reference type, such as an array or a class instance, its members can be changed even if the variable itself is ReadOnly. Esto se ilustra en el siguiente ejemplo:The following example illustrates this.

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".When initialized, the array pointed to by characterArray() holds "x", "y", and "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.Because the variable characterArray is ReadOnly, you cannot change its value once it is initialized; that is, you cannot assign a new array to it. Sin embargo, puede cambiar los valores de uno o varios de los miembros de la matriz.However, you can change the values of one or more of the array members. Después de una llamada al procedimiento ChangeArrayElement, la matriz a la que apunta characterArray() contiene "x", "M" y "z".Following a call to the procedure ChangeArrayElement, the array pointed to by characterArray() holds "x", "M", and "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.Note that this is similar to declaring a procedure parameter to be ByVal, which prevents the procedure from changing the calling argument itself but allows it to change its members.

EjemploExample

En el ejemplo siguiente se define una propiedad ReadOnly para la fecha en la que se contrató a un empleado.The following example defines a ReadOnly property for the date on which an employee was hired. La clase almacena el valor de propiedad internamente como una variable Private y solo el código dentro de la clase puede cambiar ese valor.The class stores the property value internally as a Private variable, and only code inside the class can change that value. Sin embargo, la propiedad es Public y cualquier código que pueda tener acceso a la clase puede leer la propiedad.However, the property is Public, and any code that can access the class can read the property.

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:The ReadOnly modifier can be used in these contexts:

Vea tambiénSee also