Затенение
Переменные и другие программные элементы разных модулей или разных процедур вполне могут иметь одинаковые имена. Спрашивается, как VB определяет, какой из видимых одноименных элементов имеется в виду в каждом конкретном случае? Здесь вступает в действие эффект
затенения: из нескольких одноименных элементов всегда имеется в виду более локальный, то есть тот, чья зона видимости меньше. Это значит, что локальные элементы имеют предпочтение перед модульными, а те – перед глобальными. В этом есть глубокий смысл. Программист, объявляющий элемент в своей процедуре, может не заботиться о том, что где-то в модуле есть элементы с тем же именем. А программист, объявляющий элементы в своем модуле, может не заботиться о том, что элементы с тем же именем есть где-то в проекте.
Посмотрим, к примеру, что напечатает следующий проект:
Форма 1:
Public A = 10
Public B = 20
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim A = 100
Debug.WriteLine(A)
Debug.WriteLine(B)
Debug.WriteLine(C)
End Sub
Модуль:
Module Module1
Public A = 1
Public B = 2
Public C = 3
End Module
Вот что:
100
20
3