Расчётная работа по событиям С#

Готовая работа
  • photo

Расчётная работа

по курсу «Объектно-ориентированное проектирование и программирование»

Содержание

  1. Понятие события
  2. Ключевые слова
  3. Конструирование типа с событиями
  4. Создание типа, отслеживающего события
  5. Понятие валидаторов
  6. Использование ValidationSummary
  7. Список использованной литературы
  8. Приложение А. Код отображающий конструирование типа с событиями
  9. Приложение Б. Код отображающий создание типа, отслеживающего события
  10. Приложение В. Код отображающий использование валидаторов
  11. Приложение Г. Код отображающий использование ValidationSummary Control

 

На основе делегатов построено важное средство С#: событие (event). Событие — это по сути автоматическое уведомление о выполнении некоторого действия. События работают следующим образом. Объект,которому необходима информация о некотором событии, регистрирует обработчик для этого события.  Когда ожидаемое событие происходит, вызываются все зарегистрированные обработчики. А теперь внимание: обработчики событий представляются делегатами.

Понятие события

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

event событийный_делегат объект;

Здесь элемент событийный_делегат означает имя делегата, используемого для поддержки объявляемого события, а элемент объект — это имя создаваемого событийного объекта. События это особый тип многоадресных делегатов, которые можно вызвать только из класса или структуры, в которой они объявлены (класс издателя). Если на событие подписаны другие классы или структуры, их методы обработчиков событий будут вызваны когда класс издателя инициирует событие. События можно пометить как открытые (public), закрытые (private), защищенные (protected), внутренние (internal) или protectedinternal. Эти модификаторы доступа определяют порядок доступа к классу для пользователей класса.

К событиям применяются следующие ключевые слова

Таблица.1 Ключевые слова

Ключевое слово Описание
static Делает событие доступным для вызова в любое время, даже если экземпляр класса отсутствует.
virtual Позволяет производным классам переопределять поведение события при помощи ключевого слова override.
sealed Указывает, что для производных классов событие более не является виртуальным.
abstract Компилятор не создаст блоки методов доступа к событиям add и remove и, следовательно, производные классы должны предоставлять собственную реализацию.

Событие можно объявить как статическое событие при помощи ключевого слова static. При этом событие становится доступным для вызова в любое время, даже если экземпляр класса отсутствует. Событие может быть помечено как виртуальное событие при помощи ключевого слова virtual. Это позволяет производным классам переопределять поведение события при помощи ключевого слова override. Событие, переопределяющее виртуальное событие, может также быть sealed, что определяет, что для производных классов оно более не является виртуальным. И наконец, событие можно объявить как abstract, что означает, что компилятор не создаст блоки методов доступа к событию add и remove. Таким образом, производные классы должны предоставлять собственную реализацию.

Конструирование типа с событиями

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

1. Тип, который будет хранить любую дополнительную информацию,

передаваемую получателям уведомления о событии

Согласно принятым правилам типы, хранящие сведения о событии, являются потомками System.EventArgs , а имя типа должно заканчиваться словом EventArgs.

2. Тип-делегат, определяющий прототип метода, который будет вызван

при срабатывании события

Согласно принятым правилам имя делегата должно заканчиваться словом EventHandler, а сам он должен иметь возвращаемое значение типа void и принимать два параметра (однако некоторые обработчики событий, определенные в FCL, например System. ResolveEventHandler, нарушают это соглашение). Первый параметр — это Object, ссылка на объект, присылающий уведомление, а второй — тип, производный от EventArgs, содержащий любую дополнительную информацию, необходимую получателям уведомления.

Если вы указали событие, не передающее дополнительной информации

своим получателям, не обязательно задавать новый делегат — можно использовать определенный в FCL делегат System. Event Handler, передав ему EventArgs. Empty как второй параметр. Прототип EventHandler имеет такой вид; public delegate void EventHandler(Object sender, EventArgs e);

3. Событие

В примере (приложение А) MailMsg — это имя события. Оно относится к типу HailMsgEventHandler, поэтому все получатели уведомления о нем должны предоставлять метод обратного вызова, прототип которого соответствует делегату MailMsgEventHandler.

4. Защищенный виртуальный метод, ответственный за уведомление за-

регистрированных объектов о событии Метод OnHailMsg вызывается при

1 98 Часть III

Проектирование типов получении нового сообщения. Он получает инициализированный объект HailHsgEventArgs, содержащий дополнительные сведения об этом событии. Метод должен вначале проверить, нет ли объектов, зарегистрировавшихся для получения уведомления о событии, и, если таковые имеются, вызвать срабатывание события.

Тип, производный от MailManager, может свободно переопределять метод OnHailMsg, что позволяет производному типу контролировать срабатывание события. Таким образом, производный тип может обрабатывать новые сообщения любым способом по собственному усмотрению. Обычно производный тип вызывает метод OnMailHsg базового типа, в результате зарегистрированный объект получает уведомление. Однако производный тип может и отказаться от дальнейшей передачи уведомления о событии.

5. Метод, транслирующий входную информацию в желаемое событие

У типа должен быть метод, принимающий некоторую входную информацию и транслирующий срабатывание события. В этом примере метод SimulateArrivingHsg вызывается для оповещения о прибытии нового сообщения в MailHanager.

Метод SimulateArrivingMsg принимает сведения о сообщении и создает новый объект MailMsgEventArgs, передавая его конструктору данные сообщения. Затем вызывается OnMailMsg, собственный виртуальный метод объекта MailManager, чтобы формально уведомить объект HailManager о новом сообщении. Обычно это вызывает срабатывание события, в результате уведомляются все зарегистрированные объекты. (Как сказано выше, тип, производный от MailManager, может переопределять это действие.)

Создание типа, отслеживающего события

При инициализации почтовое приложение(Приложение Б) сначала создает объект MailManager и сохраняет ссылку на него в переменной. Затем оно создает объект Fax, передавая ссылку на MaUHanager как параметр. При исполнении конструктора Fax создается новый объект-делегат MailManager. M a i l M s g E v e n t H a n d l e r — оболочка метода FaxMsg объекта Fax. Заметьте: метод FaxHsg возвращает void и принимает ту же пару параметров, определенных делегатом MailMsgEventHandler объекта MailManager – это необходимо для компиляции кода.

Детали:

Формат файла(-ов): doc

Тип работы: Расчетная работа

Предмет: Компьютерные науки

Год написания: 2010

Страниц: 26

Литературы: 6 шт.

Цена: 690 руб. (можно купить часть работы)

Добавить комментарий

Ваш email не будет показан.

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