Читайте также: |
|
Debug.Print "Выполнилась процедура П2"
End Sub
Щелчком по кнопке формы 1 мы печатаем текст "Выполнилась процедура П2".
Зоны видимости констант и типов
Для констант в Visual Basic так же, как и для переменных, определены 3 зоны видимости:
Локальные константы процедуры | Видны только внутри процедуры, в которой они объявлены | Объявляются оператором Constвнутри процедуры | |
Локальные константы модуля | Видны везде внутри модуля, в котором они объявлены. Из других модулей не видны | Объявляются оператором Const в верхней части модуля, снаружи процедур | |
Глобальные (общедоступные) константыпроекта | Видны изо всех модулей проекта | Объявляются оператором Public Constв верхней части модуля кода (и только в нем). |
Перечислимые типы могут задаваться только на уровне модуля, а не процедуры. Слова Private и Public по отношению к ним имеют обычный смысл. Например, в окне кода формы 1 вы можете определить тип:
Public Enum tip
a
b
End Enum
Тогда в окне кода формы 2 вы можете объявить переменную:
Dim s As tip
Кстати, в определении перечислимого типа можно убрать слово Public. Visual Basic по умолчанию считает перечислимые типы глобальными.
Пользовательские типы тоже могут задаваться только на уровне модуля. Слова Private и Public по отношению к ним также имеют обычный смысл. Но не во всех модулях разрешено объявлять глобальные пользовательские типы.
Затенение
Переменные разных модулей или разных процедур вполне могут иметь одинаковые имена. Спрашивается, как Visual Basic определяет, какая из видимых одноименных переменных имеется в виду в каждом конкретном случае? Здесь вступает в действие эффект затенения: из нескольких одноименных переменных всегда имеется в виду более локальная переменная, то есть та, чья зона видимости меньше. То есть переменные, локальные в процедуре, имеют предпочтение перед переменными, локальными в модуле, а те - перед глобальными переменными. В этом есть глубокий смысл. Программист, объявляющий переменные в своей процедуре, может не заботиться о том, что где-то в модуле есть переменные с тем же именем. А программист, объявляющий переменные в своем модуле, может не заботиться о том, что переменные с тем же именем есть где-то в проекте.
Пример: Имеется проект из двух форм. Окно кода формы 1:
Public a As Integer
Private Sub Command1_Click()
Form2.Show
a = 1
End Sub
Окно кода формы 2:
Public a As Integer
Private b As Integer
Private Sub Command1_Click()
a = 2
Debug.Print Form1.a 'Печатается 1
Debug.Print a 'Печатается 2
b = 3
Debug.Print b 'Печатается 3
End Sub
Private Sub Command2_Click()
Dim a As Integer
Dim b As Integer
a = 4
Debug.Print a 'Печатается 4
b = 5
Debug.Print b 'Печатается 5
End Sub
Все, что я сказал о зонах видимости и о затенении переменных, в той или иной степени относится и к константам, и к свойствам, и к процедурам, и к другим элементам Visual Basic. Я не буду вдаваться в подробности, но дам один совет, который позволит вам избежать путаницы и конфликтов: давайте разным элементам разные имена. Отсюда вытекает желательность давать элементам разной природы разные префиксы, о чем в следующем разделе.
Теперь несколько слов о пользе модуля кода. Удобство его в том, что он не является "хозяином". Глобальные переменные, константы, типы, процедуры, определенные в нем, являются всеобщим достоянием и могут употребляться в любых других модулях, не требуя указания "хозяина". Модуль кода и используется как вместилище таких глобальных элементов, нужных в других модулях.
Дата добавления: 2015-11-16; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Зоны видимости | | | Префиксы имен |