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


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

См. также