ReadOnly (Visual Basic)

Especifica que uma variável ou propriedade pode ser lida, mas não gravada.

Comentários

Regras

  • Contexto da declaração. Você só pode usar ReadOnly no nível do módulo. Isso significa que o contexto de declaração de um elemento ReadOnly precisa ser uma classe, uma estrutura ou um módulo, e não pode ser um arquivo de origem, namespace ou procedimento.

  • Modificadores combinados. Você não pode especificar ReadOnly junto com Static na mesma declaração.

  • Atribuindo um valor. O código que consome uma propriedade ReadOnly não pode definir o valor dela. Mas o código que tem acesso ao armazenamento subjacente pode atribuir ou alterar o valor a qualquer momento.

    Você pode atribuir um valor a uma variável ReadOnly somente em sua declaração ou no construtor de uma classe ou estrutura na qual ela é definida.

Quando usar uma variável ReadOnly

Há situações em que você não pode usar uma Instrução Const para declarar e atribuir um valor constante. Por exemplo, a instrução Const pode não aceitar o tipo de dados que você deseja atribuir ou talvez você não consiga calcular o valor em tempo de compilação com uma expressão constante. Talvez você nem saiba o valor em tempo de compilação. Nesses casos, você pode usar uma variável ReadOnly para manter um valor constante.

Importante

Se o tipo de dados da variável for um tipo de referência, como uma matriz ou uma instância de classe, seus membros poderão ser alterados mesmo que a variável em si seja ReadOnly. O exemplo a seguir ilustra essa situação.

ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub ChangeArrayElement()
    characterArray(1) = "M"c
End Sub

Quando inicializada, a matriz apontada por characterArray() contém "x", "y" e "z". Como a variável characterArray é ReadOnly, você não pode alterar o valor depois que ela é inicializada; ou seja, você não pode atribuir uma nova matriz a ela. No entanto, você pode alterar os valores de um ou mais membros da matriz. Após uma chamada ao procedimento ChangeArrayElement, a matriz apontada por characterArray() contém "x", "M" e "z".

Observe que isso é semelhante a declarar um parâmetro de procedimento como ByVal, o que impede que o procedimento altere o próprio argumento de chamada, mas permite que ele altere os membros.

Exemplo

O exemplo a seguir define uma propriedade ReadOnly para a data em que um funcionário foi contratado. A classe armazena o valor da propriedade internamente como uma variável Private e apenas o código dentro da classe pode alterar esse valor. No entanto, a propriedade é Public, e qualquer código que possa acessar a classe pode ler a propriedade.

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

O modificador ReadOnly pode ser usado nestes contextos:

Confira também