ReadOnly (Visual Basic)
Указывает, что переменная или свойство может быть прочитана, но не записана.
Замечания
Правила
Контекст объявления.
ReadOnly
можно использовать только на уровне модуля. Это означает, что контекст объявления дляReadOnly
элемента должен быть классом, структурой или модулем и не может быть исходным файлом, пространством имен или процедурой.Объединенные модификаторы. Нельзя указать
ReadOnly
вместе сStatic
тем же объявлением.Назначение значения. Код, использующее
ReadOnly
свойство, не может задать его значение. Но код, имеющий доступ к базовому хранилищу, может назначать или изменять значение в любое время.Можно назначить значение переменной
ReadOnly
только в объявлении или конструкторе класса или структуры, в которой она определена.
Использование переменной ReadOnly
Существуют ситуации, в которых нельзя использовать оператор Const для объявления и назначения константного значения. Например, Const
инструкция может не принимать тип данных, который вы хотите назначить, или вы можете не вычислить значение во время компиляции с константным выражением. Вы даже не знаете значение во время компиляции. В этих случаях можно использовать переменную ReadOnly
для хранения константного значения.
Внимание
Если тип данных переменной является ссылочным типом, например массивом или экземпляром класса, его члены можно изменить, даже если сама переменная.ReadOnly
Это показано в следующем примере.
ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub ChangeArrayElement()
characterArray(1) = "M"c
End Sub
При инициализации массив, указывающий на characterArray()
"x", "y" и "z". Так как переменная characterArray
имеет ReadOnly
значение, его значение нельзя изменить после инициализации. Т. е. нельзя назначить ему новый массив. Однако можно изменить значения одного или нескольких элементов массива. После вызова процедуры ChangeArrayElement
массив, на который указывает characterArray()
значение "x", "M" и "z".
Обратите внимание, что это похоже на объявление параметра процедуры ByVal, что предотвращает изменение самого вызывающего аргумента процедурой, но позволяет ему изменять его члены.
Пример
В следующем примере определяется ReadOnly
свойство для даты, в которой был нанят сотрудник. Класс сохраняет значение свойства внутри переменной Private
, и только код внутри класса может изменить это значение. Однако свойство имеет значение Public
, и любой код, который может получить доступ к классу, может прочитать это свойство.
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
Модификатор ReadOnly
можно использовать в следующих контекстах: