Partilhar via


Somente leitura (Visual Basic)

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

Observações

Regras

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

  • Modificadores combinados. Não é possível especificar ReadOnly junto com Static na mesma declaração.

  • Atribuição de um valor. O código que consome uma ReadOnly propriedade não pode definir seu valor. 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 ReadOnly variável 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 Const instrução pode não aceitar o tipo de dados que você deseja atribuir ou talvez não seja possível 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 ReadOnly variável 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 própria variável seja ReadOnly. O exemplo a seguir ilustra isso.

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() mantém "x", "y" e "z". Como a variável characterArray é ReadOnly, você não pode alterar seu valor depois de inicializada, ou seja, não é possível atribuir uma nova matriz a ela. No entanto, você pode alterar os valores de um ou mais dos membros da matriz. Após uma chamada para o procedimento ChangeArrayElement, a matriz apontada por characterArray() manté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 seus membros.

Exemplo

O exemplo a seguir define uma ReadOnly propriedade para a data em que um funcionário foi contratado. A classe armazena o valor da propriedade internamente como uma Private variável, e somente 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 ReadOnly modificador pode ser usado nestes contextos:

Consulte também