Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Использование переменных с одним и тем же именем в различных уровнях области действия

Область действия или видимости (scope - скауп) переменных

Термин "область видимости" относится к области процедуры или модуля VB, где данная переменная, процедура или другой идентификатор являются доступными. Области действия: процедурного уровня и модульного уровня.

Переменная объявляется только один раз:

- либо в разделе объявлений модуля (модульный уровень);

- либо в начале процедуры (процедурный уровень).

Область действия процедурного уровня: переменная, объявленная в процедуре, доступна только в этой процедуре. Поэтому говорят, что такая переменная имеет область действия процедурного уровня (procedure-level scope).

В результате, при этом ограничении области действия программист может использовать одно и то же имя переменной в разных процедурах и двусмысленности не возникает.

По умолчанию переменные локальны. При этом слово Private (локальная) работает локально точно также, как и Dim, например, в строках:

Private strProfit

Dim strProfit

Область действия модульного уровня: используется, когда несколько процедур имеют доступ к одной и той же переменной. Обычно эффективней вычислить один раз какое-либо значение и сохранить его в переменной, а затем использовать эту переменную в ряде процедур, чтобы не вычислять одно и то же значение несколько раз.

Для того чтобы переменная была доступна для всех процедур в определенном модуле, нужно поместить оператор Dim в начало модуля (в разделе объявлений), т. е. перед процедурами модуля.

Например:

Dim HelloMsg As String 'используется всеми процедурами в этом модуле

Sub HelloWorld ()

HelloMsg = "Hello, World!"

MsgBox HelloMsg,, "Окно приветствия"

End Sub

 

Sub HelloDave ()

HelloMsg = "Hello, Dave!"

MsgBox HelloMsg,, "Другое окно сообщения"

End Sub

 

В листинге процедур нет объявлений переменной HelloMsg, т. к. она объявлена в разделе объявлений модуля.

При написании оператора MsgBox в обоих случаях используется несколько аргументов:

- первый – переменная HelloMsg;

- второй – указание вида кнопки окна сообщений MsgBox. По умолчанию, если аргумент опускается, т. е., если между запятыми – пробел, то в окно встраивается просто кнопка ОК;

- третий – заголовок окна сообщения. Он обязательно заключается в кавычки.

В скобках после имени процедуры записываются необходимые аргументы, например, имя файла, к которому относится данная процедура. По умолчанию скобки всегда присутствуют.

 

Имя переменной уникально в области ее действия. Однако можно иметь переменные с одним и тем же именем на разных уровнях действия. Когда переменные имеют одно и то же имя, но разные области действия, VB использует переменную с наиболее локальной областью действия.

Например, к предыдущему листингу добавляется:

 

Sub AnotherMessage ()

Dim HelloMsg 'локальное объявление

HelloMsg = "Привет"

MsgBox HelloMsg,, " Еще одно окно сообщения"

End Sub

 

В первых двух процедурах переменная внутри процедуры не объявляется, поэтому используется переменная модульного уровня. В последней процедуре работает локальная переменная HelloMsg, объявленная в процедуре, а переменная модульного уровня с этим же именем в этой процедуре недоступна.

Для того чтобы переменная имела видимость в пределахмодуля при ее объявлении используется, как правило, оператор Private, а не Dim. Хотя Dim также используется, когда требуется обеспечить совместимость программ с более ранними версиями VB.

Объявление переменной с помощью слова Global, вместо операторов Private и Dim, делает ее доступной в пределах всего проекта. При этом переменная также должна быть объявлена в разделе объявлений модуля.

Для открытия глобальной процедуры используется оператор Public, например: Public Sub Password()

По умолчанию при открытии глобальной процедуры слова Public или Global, как правило, опускаются, и запись выглядит: Sub Password().

Для открытия локальной процедуры обязательно используется слово Private. Например: Private Sub Form_Load()

Ключевое слово Static (статическая переменная) в объявлении переменной используется, когда необходимо, чтобы переменная оставалась в памяти даже тогда, когда процедура закончила работу, чтобы использовать ее полученное значение. Объявлять переменные словом Static можно только внутри процедуры.

Если необходимо, чтобы все переменные в процедуре сохраняли свои значения, даже когда процедура не выполняется, следует поместить слово Static в объявлении самой процедуры перед ключевым словом, определяющим тип процедуры (т. е.,перед оператором Sub), например:

Private Static Sub cmdStart_Click()

<== предыдущая лекция | следующая лекция ==>
Требование явного объявления переменных | Создание именованных констант
Поделиться с друзьями:


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


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



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




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