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

С перечислениями мы с вами сталкивались не раз. Каждый раз под перечислением понимался список значений какого-нибудь свойства или параметра, или чего-нибудь другого. Например, в 12.3.6мы использовали перечисление RotateFlipType в качестве параметра метода. У этого перечисления 16 значений, из которых можно выбирать любое.

Все перечисления, с которыми мы сталкивались, были созданы заранее профессиональными программистами, включены ими в библиотеку классов .NET Framework и достались нам готовыми к употреблению. Нам осталось только с удобством выбирать значения из всплывающего списка. Однако в реальном программировании часто встречаются ситуации, когда необходимо иметь перечисление, еще никем не созданное.

Пример 1. Пусть вам хотелось бы с удобством пользоваться списком своих любимых футбольных команд:

Real, MU, Вперед, Milan

VB позволяет вам самому создать такое (и вообще, какое угодно) перечисление и пользоваться им. Вот что нужно для этого сделать.

Сначала в верхней части окна кода, вне процедур, пишем такой текст:

Enum Мои_команды

Real

MU

Вперед

Milan

End Enum

Это не процедура, хоть и похожа. Слово Enum означает, что это перечисление. Мы придумали ему имя Мои_команды. Слова End Enum означают конец перечисления.

Это и не переменная. Вы не можете написать

Мои_команды = Вперед

То, что мы создали, это новый тип. Тип Мои_команды. Впервые мы не просто пользуемся типом, а создаем тип.

Чтобы извлечь выгоду из этого типа и воспользоваться перечислением, мы должны создать переменную данного типа. Делается это обычным образом:

Dim Команда As Мои_команды

Переменная Команда имеет право принимать только одно из четырех значений, перечисленных в объявлении типа.

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

Команда =

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

Команда = Мои_команды.Milan

Теперь вы можете как угодно работать с переменной. Например, так:

If Команда = Мои_команды.Real Then MsgBox("Это не команда, а сборная мира!")

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

Public Class Form1

Inherits System.Windows.Forms.Form

Windows Form Designer generated code

Enum Дни

понедельник

вторник

среда

четверг

пятница

суббота

воскресенье

End Enum

Dim День As Дни

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

День = 0

Debug.WriteLine(День) 'понедельник

День = 1

Debug.WriteLine(День) 'вторник

День = Дни.понедельник

Debug.WriteLine(День) 'понедельник

День = День + 2

Debug.WriteLine(День) 'среда

День = Дни.среда

Do Until День = Дни.воскресенье

День = День + 1

Debug.WriteLine(День) 'четверг пятница суббота воскресенье

Loop

For День = Дни.вторник To Дни.четверг

Debug.WriteLine(День) 'вторник среда четверг

Next

For День = Дни.воскресенье To Дни.понедельник Step -2

Debug.WriteLine(День) 'воскресенье пятница среда понедельник

Next

End Sub

End Class

Пояснения: То, что напечатают операторы этой программы, вы видите в комментариях. Поскольку все значения перечисления пронумерованы, то, например, все равно, как написать:

День = 1

или

День = Дни.вторник

Пример 3. В этом примере вы увидите, как можно анализировать с пользой для дела переменные перечислимого типа. Предполагается, что, как в предыдущем примере, определены тип Дни и переменная День.

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

День = InputBox("Введите номер дня недели")

Select Case День - 1 'Чтобы понедельник был не нулевым, а первым

Case Дни.понедельник To Дни.среда

MsgBox("Начало недели")

Case Дни.четверг, Дни.пятница

MsgBox("Середина недели")

Case Дни.суббота, Дни.воскресенье

MsgBox("Отдых")

Case Is > Дни.воскресенье, Is < Дни.понедельник

MsgBox("Таких дней не бывает")

End Select

End Sub

Пояснения: Обратите внимание, что вводить день недели привычным образом буквами просто так не удастся, так как информация, вводимая в текстовое поле окна InputBox имеет тип String, который автоматически не преобразуется в перечислимый. Поэтому я выбрал ввод номера дня недели.

Настоящую пользу из собственных перечислений вы начнете извлекать в проекте «Будильник-секундомер» и когда изучите массивы.