Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
88
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Область видимости – блок

Блоком называется последовательность всех выполняющихся друг за другом операторов. Если вы помните, эти операторы легко узнать, так как у них одинаковый отступ от левого края окна. Блоки могут входить внутрь других блоков. Рассмотрим бессмысленную программу:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim a, b, c As Integer

b = 6

For a = 5 To 6

b = 8

c = 2 * 2

Next

a = 1

If a > 0 Then

a = 7

c = 5 * 5

a = 8

End If

a = 3

End Sub

Все тело процедуры есть блок из 5 операторов:

b = 6

For . . .

a = 1

If . . .

a = 3

Внутрь этого блока входят два блока. Один есть содержимое оператора For:

b = 8

c = 2 * 2

Другой – содержимое оператора If:

a = 7

c = 5 * 5

a = 8

Если бы внутрь этих двух блоков входили сложные операторы, то операторы, из которых состоят эти сложные операторы, тоже составляли бы блоки, входящие в упомянутые. Матрешка.

Оказывается, целесообразно иметь области видимости меньшие, чем процедура. Это блоки.

Зачем они могут понадобиться? Ну, например, мы видим, что в нашем примере переменная c в каждом блоке делает «важные» дела, причем в каждом блоке свои. Мы опасаемся, как бы при дальнейшей доработке программы значения переменной c из одного блока при нашей невнимательности не повредили бы значения переменной c из другого блока. Что делать для спокойствия? Уберем объявление c из начала процедуры и объявим переменную c внутри каждого блока:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim a, b As Integer

b = 6

For a = 5 To 6

Dim c As Integer

b = 8

c = 2 * 2

Next

a = 1

If a > 0 Then

Dim c As Integer

a = 7

c = 5 * 5

a = 8

End If

a = 3

End Sub

Теперь мы имеем в процедуре две совершенно независимые переменные, имеющие одинаковое имя c. Каждая из них создается и инициализируется в момент, когда компьютер заходит в ее блок. Она живет и работает, пока работает блок. Когда же компьютер выходит из блока, переменная уничтожается вместе со своим значением.

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

У констант тоже существует область видимости блок.

      1. Статические переменные

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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Счетчик As Integer

Счетчик = Счетчик + 1

TextBox1.Text = Счетчик

End Sub

Делать счетчик модульной переменной не хочется, никому он кроме нас не нужен. Чтобы счетчик не обнулялся, объявим его статической переменной:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Static Счетчик As Integer

Счетчик = Счетчик + 1

TextBox1.Text = Счетчик

End Sub

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

Теперь все в порядке. Счетчик накапливается. А для других процедур переменная невидима.

Пока об областях видимости нам достаточно. Более подробную информацию вы найдете в Error: Reference source not found.