Compartilhar via


ReadOnly (Visual Basic)

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

Observações

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 ReadOnly elemento deve ser uma classe, estrutura ou 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 a mesma declaração.

  • Atribuindo 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 apenas 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 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 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 contém characterArray() "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 membros da matriz. Após uma chamada ao procedimento ChangeArrayElement, a matriz apontada contém characterArray() "x", "M" e "z".

Observe que isso é semelhante à declaração de um parâmetro de procedimento como ByVal, o que impede que o procedimento altere o argumento de chamada em si, 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 é Publice 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