Практическое руководство. Управление областью действия переменной
Обновлен: Ноябрь 2007
Обычно переменная находится в области доступа (или доступна для ссылки) в том блоке, где она объявляется. В некоторых случаях уровень доступа переменной может повлиять на ее область действия.
Дополнительные сведения см. в разделе Область видимости в Visual Basic.
Область действия на уровне блока или процедуры
Отображение переменной только внутри блока
Поместите Оператор Dim (Visual Basic) для переменной между начальными и конечными операторами объявления блока, например между операторами For и Next цикла For.
Обратиться к переменной можно только из блока.
Отображение переменной только в процедуре
Поместите оператор Dim для переменной внутри процедуры, но вне любого блока (например блока With... End With).
Можно обращаться к переменной только внутри процедуры, в том числе внутри любого блока, содержащегося в процедуре.
Область действия на уровне модуля или пространства имен
Для удобства один и тот же термин уровень модуля применяется в отношении модулей, классов и структур. Уровень доступа переменной уровня модуля определяет область ее действия. На эту область также влияет пространство имен, которому принадлежит модуль, класс или структура.
Отображение переменной внутри модуля, класса или структуры
Поместите оператор Dim для переменной внутри модуля, класса или структуры, но вне любой процедуры.
Включите в оператор Dim ключевое слово Private (Visual Basic).
Обращаться к переменной можно из любого места внутри модуля, класса или структуры, но не из-за их пределов.
Отображение переменной внутри пространства имен
Поместите оператор Dim для переменной внутри модуля, класса или структуры, но вне любой процедуры.
Включите в оператор Dim ключевое слово Friend (Visual Basic) или Public (Visual Basic).
Обращаться к переменной можно из любого места внутри пространства имен, содержащего модули, классы или структуры.
Пример
В следующем примере объявляется переменная на уровне модуля и ее видимость ограничивается модулем.
Module demonstrateScope
Private strMsg As String
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub
End Module
В предыдущем примере все процедуры, определенные в модуле demonstrateScope, могут ссылаться на переменную strMsg типа String. При вызове процедуры usePrivateVariable содержимое строковой переменной strMsg отображается в диалоговом окне.
Учитывая следующие изменения в предыдущем примере, обращаться к строковой переменной strMsg по коду можно из любого места в пространстве имен ее объявления.
Public strMsg As String
Отказоустойчивость
Чем уже область действия переменной, тем меньше возможность случайной ссылки на нее вместо другой переменной с тем же именем. Кроме того, можно сократить проблемы, связанные с соответствием ссылки.
Безопасность
Чем уже область действия переменной, тем меньше вероятность неправильного использования этой переменной злонамеренным кодом.
См. также
Основные понятия
Область видимости в Visual Basic
Время существования в Visual Basic
Объявление переменной в Visual Basic