Поделиться через


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 можно использовать в следующих контекстах:

Оператор Dim

Оператор Property

См. также

Ссылки

WriteOnly (Visual Basic)

Другие ресурсы

Ключевые слова (Visual Basic)