КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
СобытияЕсли в типе определен член-событие, то этот тип (или его экземпляр) может уведомлять другие объекты о некоторых особых событиях. Скажем, класс Button определяет событие Click. В приложении могут быть объекты, которые должны получать уведомление о щелчке объекта Button, а получив такое уведомление — исполнять некоторые действия. События — это члены типа, обеспечивающие такого рода взаимодействие. Тип, в котором определены события, как минимум поддерживает: 1. регистрацию статического метода типа или экземплярного метода объекта, заинтересованных в получении уведомления о событии; 2. отмену регистрации статического метода типа или экземплярного метода объекта, получающих уведомления о событии; 3. уведомление зарегистрированных методов о том, что событие произошло.
Когда событие происходит, тип уведомляет об этом все зарегистрированные методы. Модель событий CLR основана на делегатах. Делегаты позволяют обращаться к методам обратного вызова (callback method), не нарушая безопасности типов. Метод обратного вызова — это механизм, позволяющий объекту получать уведомления, на которые он подписался.
Допустим, нам нужно создать почтовое приложение. Получив сообщение по электронной почте, пользователь может изъявить желание переслать его по факсу или переправить на пейджер. Допустим, вы начали проектирование приложения с разработки типа MailManager, получающего входящие сообщения. Тип MailManager будет поддерживать событие NewMail. Другие типы (например, Fax или Pager) могут зарегистрироваться для получения уведомления об этом событии. Когда тип MailManager получит новое сообщение, возникнет событие, в результате чего сообщение будет передано всем зарегистрированным объектам. Далее каждый объект обрабатывает сообщение в соответствии с собственной логикой. Пусть во время инициализации приложения создается только один экземпляр MailManager и любое число объектов Fax и Pager. На рис. 10-1 показано, как инициализируется приложение и что происходит при получении сообщения. Рис. 10-1. Архитектура приложения, в котором используются события
Это приложение работает так. При его инициализации создается экземпляр объекта MailManager, поддерживающего событие NewMail. Во время создания объекты Fax и Pager регистрируются, для получения уведомлений о событии NewMail объекта MailManager, так что MailManager знает, что эти объекты следует уведомить о прибытии нового сообщения. Если в дальнейшем MailManager примет новое сообщение, это вызовет возникновение события NewMail, что позволит всем зарегистрировавшимся объектам выполнить нужную обработку нового сообщения.
|