Иллюстрированный самоучитель по VB.NET




Простейшее инициирование событий


Простейшее инициирование событий

Давайте вернемся к простому классу Empl oyee и подробно, шаг за шагом разберем все, что необходимо сделать для определения и инициирования событий. Предположим, событие должно инициироваться при попытке увеличения заработной платы более чем на 10 процентов без ввода пароля. В главе 4 метод RaiseSalary выглядел так:

Public Overloads Sub RaiseSalary(ByVal percent As Decimal)

If percent > LIMIT Then

' Операция запрещена - Необходим пароль

Console.WriteLine("MUST HAVE PASSWORD TO RAISE SALARY " & _

"MORE THAN LIMIT!!!!") Else

m_Sa1ary =(1 + percent) * m_salary

End If

End Sub

Вместо выделенной команды, выводящей текстовое сообщение на консоль, должно инициироваться событие. Задача решается в несколько этапов. В простейшем случае в классе сначала объявляется открытая переменная с ключевым словом Event, с указанием имени события и его параметров. Например, следующая строка весьма близка к синтаксису VB6: Public Event SalarySecurityEventdnessage as String) В этой строке объявляется открытое событие с параметром строкового типа.

События обычно объявляются с модификатором Public, никогда не возвращают значений и могут получать параметры произвольного типа, кроме ParamArray.

После того как переменная события будет определена, событие инициируется командой следующего вида (впрочем, для того, чтобы событие действительно произошло, потребуются еще кое-какие дополнительные действия):

RaiseEvent SalarySecurityEventC'MUST HAVE PASSWORD TO RAISE " & _

"Salary MORE THAN LIMIT!! !!")

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

Public Event SalarySecurityEvent(ByVal who As Employee, ByVale As system.EventArgs)



Содержание  Назад  Вперед