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