Указывает, что процедура-элемент доступна только для чтения.
Синтаксис
Описание
Указывает, что метод не изменяет объект, который вызывает его. Скрытый
параметр
This будет рассматриваться
только для чтения. Декларация может быть прочитана как 'вызов метода const
обещает не изменять объект', и компилятор выдаст ошибку, если
процедура-элемент пытается изменить любое из полей данных, или вызывает не
const процедуру-элемент.
Только для чтения (
Const) декларация является мерой
безопасности типа, которая может быть прочитана как 'обещает не изменить.'
Компилятор использует const декларации для проверки операций на переменные и
параметры и вызывают ошибку во время компиляции, если потенциально могут
изменяться данные. Нет накладных расходов при использовании спецификатора
Const
, так как все проверки выполняются во время компиляции.
Процедуры-элементы не могут быть одновременно
Const и
Static
, так как статические процедуры-элементы не имеют скрытый параметр
This.
Для методов с
Const в их декларации,
Const
также может быть указано на соответствующих полях определений методов для
улучшения читабельности кода.
Пример
'' Const процедура-элемент
Type foo
x As Integer
c As Const Integer = 0
Declare Const Sub Inspect1()
Declare Const Sub Inspect2()
Declare Sub Mutate1()
Declare Sub Mutate2()
End Type
''
Sub foo.Mutate1()
'' мы можем изменить неконстантные поля
данных
x = 1
'' но мы не можем изменить константные данные
'' полей, они обещаны быть неизменяемыми
'' c = 1 '' Ошибка
компиляции
End Sub
''
Sub foo.Mutate2()
'' мы можем вызвать
константные элементы
Inspect1()
'' и неконстантные элементы
Mutate1()
End Sub
''
Sub foo.Inspect1()
'' можно использовать элементы данных
Dim y As Integer
y = c + x
'' но нельзя изменять их, потому что Inspect1()
'' является const и
обещан быть неизменяемым в foo
'' x = 10 '' Ошибка
компиляции
End Sub
''
Sub foo.Inspect2()
'' мы можем вызвать
константные элементы
Inspect1()
'' но нельзя вызывать неконстантные элементы
'' Mutate1() '' Ошибка компиляции
End Sub
Отличия от QB
См. также