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 umReadOnly
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 comStatic
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: