ReadOnly (Visual Basic)

Обновлен: Ноябрь 2007

Указывает на то, что переменная или свойство может быть использована для чтения, но не для записи.

Заметки

Правила

  • Контекст объявления. Ключевое слово ReadOnly можно использовать только на уровне модуля. Это означает, что элемент с модификатором ReadOnly должен объявляться в контексте класса, структуры или модуля, но не исходного файла, пространства имен или процедуры.

  • Комбинированные модификаторы. Использовать модификаторы ReadOnly и Static в одном объявлении нельзя.

  • Присвоение значения. Код, использующий свойство с модификатором ReadOnly, не может задать его значение. Тем не менее, код, имеющий доступ к используемой свойством памяти, может задать или изменить значение в любое время.

    Значение переменной с модификатором ReadOnly можно присваивать только при объявлении или в конструкторе класса или структуры.

Когда следует использовать переменные с модификатором ReadOnly

Существуют ситуации, в которых нельзя использовать Оператор Const (Visual Basic) для объявления и присвоения константных значений. Например, инструкция Const может не поддерживать тип данных, который требуется применить, или может отсутствовать возможность вычисления значения во время компиляции с помощью константного выражения. Значение даже может быть неизвестно во время компиляции. В этих случаях для хранения постоянного значения можно использовать переменную с модификатором ReadOnly.

z2b2c2ka.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Если тип данных переменной является ссылочным (например, это массив или экземпляр класса), то его члены могут быть изменены, даже если сама переменная имеет модификатор 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, который запрещает процедуре изменять аргумент вызова, но позволяет ей изменять его члены.

Пример

В следующем примере определяется свойство с модификатором 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