Const (Элемент)
 
Указывает, что процедура-элемент доступна только для чтения.

Синтаксис

Type typename
End Type

Const Sub|Function|... typename ...
...
End Sub|Function|...

Описание

Указывает, что метод не изменяет объект, который вызывает его. Скрытый параметр 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

  • Новое в FreeBASIC

См. также