Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Зоны видимости




Зоны видимости переменных

А теперь поговорим о важном средстве обеспечения удобства и надежности программирования на Visual Basic - о механизме задания зон видимости переменных, процедур и других элементов Visual Basic. В 17.2 мы уже сталкивались с этим механизмом, когда переменные, объявленные внутри процедуры, являлись локальными в процедуре, то есть невидимыми снаружи процедуры. Поэтому их нельзя было использовать в других процедурах модуля. Если вы подзабыли этот раздел, то сейчас перечтите.

Перечли? Хорошо. Для переменных в Visual Basic определены 3 зоны видимости:

  Локальные переменные процедуры Видны только внутри процедуры, в которой они объявлены Объявляются оператором Dimвнутри процедуры
  Локальные переменные модуля Видны везде внутри модуля, в котором они объявлены. Из других модулей не видны Объявляются оператором Dim или Privateв верхней части модуля, снаружи процедур
  Глобальные (общедоступные) переменныепроекта Видны отовсюду из всех модулей проекта Объявляются оператором Publicв верхней части модуля, снаружи процедур

Как видите, первая зона - самая узкая, третья - самая широкая. Пример окна кода:

Public a As Integer 'Глобальная переменная

Private b As Integer 'Локальная переменная модуля

 

Private Sub Command1_Click()

Private c As Integer 'Локальная переменная процедуры

.......

End Sub

С первыми двумя зонами видимости вы знакомы. С третьей зоной сейчас познакомимся. Вот как можно из одного модуля обращаться к глобальным переменным, объявленным в другом модуле. Пусть в нашем проекте созданы две формы: Form1 и Form2. Вот окно кода формы 1:

Public a As Integer

Private Sub Command1_Click()

Form2.Show

a = 10

End Sub

Оператор Public объявляет переменную a как глобальную (или общедоступную), видимую изо всех модулей. Щелкнув по кнопке формы 1, вы присваиваете переменной a значение 10.

Вот окно кода формы 2:

Private Sub Command1_Click()

Debug.Print Form1.a

End Sub

Щелкнув по кнопке формы 2, вы печатаете 10 - правильное значение переменной a.

 

Как видите, для того, чтобы обратиться к переменной, объявленной в другом модуле, необходимо указать хозяина переменной. Visual Basic привык, что у чужих элементов хозяин должен быть указан, если же хозяин не указан, значит элемент "свой". Попробуем вместо Debug.Print Form1.a написать просто Debug.Print a. Поскольку хозяин не указан, Visual Basic поймет, что переменная a "своя", то есть принадлежит форме 2. (Это ничего, что она не объявлена, Visual Basic все равно считает ее существующей.) А поскольку "своей" переменной a ничего не присвоено, то ничего и не будет напечатано. В пошаговом режиме вы увидите, что если в форме 1 значение a равно 10, то в форме 2 значение a равно Empty (a=Empty). По английски это значит "пусто", то есть переменной не было присвоено никакого значения.

 

Итак, если мы хотим, чтобы переменная была видна во всем проекте, мы объявляем ее оператором Public. Такая переменная называется глобальной. Если же мы хотим, чтобы переменная была видна только в своем модуле (была локальной в модуле), мы объявляем ее оператором Dim. Вместо оператора Dim принято использовать оператор Private. По действию они неотличимы, но английский смысл слова Private (частная собственность, вход запрещен) лучше подходит к случаю, поэтому программисты в основном используют его.

Зоны видимости процедур

Процедуры могут быть или глобальными или локальными

Для процедур в Visual Basic определены 2 зоны видимости:

  Локальные процедуры модуля Видны везде внутри модуля, в котором они объявлены. Из других модулей не видны Объявляются оператором Private
  Глобальные (общедоступные) процедурыпроекта Видны из всех модулей проекта Объявляются оператором Public

Вот пример использования глобальной процедуры П2.

Окно кода формы 1:

Private Sub Command1_Click()

Form2.П2

End Sub

Окно кода формы 2:

Public Sub П2()

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 по отношению к ним также имеют обычный смысл. Но не во всех модулях разрешено объявлять глобальные пользовательские типы.




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 439; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.