Основы VB.NET Урок 6. События классов в VB.NET
Осталось нам посмотреть, как добавлять события в класс. События - это способность класса извещать окружение о некотором произошедшем событии. Например, у кнопки есть событие Click, наступающее, когда пользователь на кнопке щелкает.
Сейчас мы напишем наш класс Dice ("Игральная кость"). В классе будет единственный метод GetRandom, который будет возвращать случайное число от 1 до 6. Кроме того, в классе будет событие MaxNumber. Наш класс будет генерировать это событие в случае выпадения 6 очков (т. е. если метод GetRandom возвратит максимально возможное значение 6).
Вот полностью текст кода для нашего класса:
Class Dice
Private r As New Random()
Public Event MaxNumber()
Public Function GetRandom()
Dim k As Integer
k = r.Next Mod 6 + 1
If k = 6 Then
RaiseEvent MaxNumber()
End If
Return k
End Function
End Class
Обсудим код этого класса. Во-первых, в нем мы объявили событие MaxNumber строкой
Public Event MaxNumber()
Событие мы, естественно, объявили как Public. У нашего события параметров нет, но могли бы и быть (в этом случае пишем их в круглых скобках через запятую).
Для того, чтобы наше событие произошло, мы используем оператор RaiseEvent:
RaiseEvent MaxNumber()
Как вы видите, синтаксис оператора прост - после ключевого слова RaiseEvent мы просто пишем имя события (при необходимости с параметрами). По коду видно, что наше событие возникает тогда, когда на нашем кубике выпадет 6.
Добавляем теперь модуль для испытания нашего класса. Вот он:
Module Test
Dim WithEvents d As Dice
Public Sub Main()
d = New Dice()
'Бросаем кость
Console.WriteLine(d.GetRandom())
End Sub
'Добавляем обработчик
Sub MaxListener() Handles d.MaxNumber
Console.WriteLine("Получено максимальное значение")
End Sub
End Module
Обратите тут внимание на ряд моментов. Во-первых, мы объявляем экземпляр нашего класса с ключевым словом WithEvents. Во-вторых, мы должны в нашей программе добавить обработчик для этого события. В этом обработчике мы можем написать все, что угодно - это дело уже нашей программы, а не класса. Класс только извещает программу, что в нем произошло некоторое событие, а программа уже сама определяет, что делать при наступлении события. Это мы делаем в строках
Sub MaxListener() Handles d.MaxNumber
Console.WriteLine("Получено максимальное значение")
End Sub
Как вы видите, обработчик представляет из себя процедуру, в которую мы внесли некоторое добавление - а именно указали, что она есть обработчик для события MaxNumber экземпляра d нашего класса. Это мы делаем посредством ключевого слова Handles:
Sub MaxListener() Handles d.MaxNumber
В этом обработчике, разумеется, можно написать все, что угодно (абсолютно аналогично обработчику щелчка на кнопке - что надо, то пишем).
Добавить заготовку для обработчика события можно следующим способом. В левом combobox'е окна кода выбираем имя переменной класс (d в нашем случае), а в правом - имя события (MaxNumber в нашем случае):
Ну и полученную заготовку вставляем нужный нам код.
Запускаем программу. Чаще всего результатом программы будет просто число (которые выпадет на нашем кубике), но если нам повезет и на кубике выпадет 6, то кроме шестерки на экране покажеться надпись "Получено максимальное значение":
|