Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лр2_События_б.doc
Скачиваний:
6
Добавлен:
16.08.2019
Размер:
152.58 Кб
Скачать

13

Тверской государственный технический университет

Кафедра ЭВМ

Программирование на языке C# в среде Microsoft Visual Studio.

События.

Методические указания к лабораторным работам

по курсу " Технология программирования "

Лабораторная работа № 2

Тверь 2012

Цель лабораторной работы заключается в изучении и приобретении практических навыков работы с событиями и использование их в Windows-приложениях.

Основными задачами, решаемыми в процессе выполнения лабораторной работы, являются:

  • Изучение особенностей событий и их создания в интегрированной среде Visual Studio.

  • Изучение особенностей и приобретение практических навыков использования событий в Windows-приложениях.

Методическое указание обсуждено на заседании кафедры ЭВМ (протокол №___от 2002_ года) и рекомендовано к печати.

Составитель: Веселов А.А.

Содержание

1. Теоретическая часть.

1.1. События.

1.2. Объявление события.

1.3. Использование события.

1.4. Многоцелевая обработка события.

1.5. Использования событий в компонентах .NET.

1.6. Классы с большим числом событий.

1.7. Что объединяет между собой события, делегаты и свойства.

2. Задание на лабораторную работу.

3. Содержание отчета по лабораторной работе.

4. Вопросы для самопроверки.

Литература.

1. Теоретическая часть

1.1. События

Работу любого объекта можно рассматривать как некоторую последовательность выполняемых действий, в результате которых происходит переход из одного его состояния в некоторое другое. Обычно сам факт такой смены состояний называют событием. С точки зрения программиста, под событием следует понимать некоторый признак или, по сути дела, уведомление о выполнении некоторого действия. Как правило, события работают следующим образом. Объект, которому необходима информация о некотором событии, регистрируется как обработчик этого события. Когда ожидаемое событие происходит, то вызываются все зарегистрированные обработчики. И вот тут-то и оказываются очень полезными свойства и делегаты.

Дело в том, что свойство представляет собой объект, объединяющий в себе закрытую переменную и открытые функции доступа к этой переменной. А что, если вместо переменной в свойстве использовать указатель на функцию? А вот тогда мы и получим то, что называют событием, указывающее на функцию-обработчик этого события. Но поскольку указатель представляет собой незащищенный тип, то вместо него лучше всего использовать делегат, который представляет собой экземпляр класса. Таким образом, событие представляет собой свойство, связанное через делегат с функцией, реагирующей данное событие и известная под названием функции-обработчика этого события.

Класс, решивший иметь события, должен уметь делать, по крайней мере, три вещи:

  • объявить событие в классе;

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

  • проанализировать, при необходимости, результаты события, используя значения выходных аргументов события, возвращенные обработчиком.

Применительно к событиям введена следующая терминология. Объект, генерирующий события, называют источником (source), а объект, получающий событие, называют приёмником (sink). Функции приёмника, реагирующие на событие, называют обработчиками (handlers) события.

Часто используются и другие термины. Объект, генерирующий события, называют издателем (publisher). Говорят, что издатель публикует события, на которые должны подписаться подписчики (subscribers) - объекты, обработчики которых реагируют на события издателя. На событие указывает ссылка или дескриптор в объекте-издателе (объекте-источнике). Подписка на событие заключается в привязке к событию требуемого обработчика, то есть создание объекта делегата, инкапсулирующего обработчик объекта подписчика (объекта-приёмника), и добавления этого делегата к объекту события издателя. Объект события представляет собой особый множественный объект делегата, который может вызываться только в объекте-издателе.

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

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