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