Главная страница

лр1. Отчет по лабораторнои работе 1 Делегаты и события Выполнил студент гр. 220201 Геворгян Д. Р


Скачать 19.13 Kb.
НазваниеОтчет по лабораторнои работе 1 Делегаты и события Выполнил студент гр. 220201 Геворгян Д. Р
Дата03.06.2021
Размер19.13 Kb.
Формат файлаdocx
Имя файлалр1.docx
ТипОтчет
#213589

МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение Высшего образования «Тульский государственный университет»

Институт прикладной математики и компьютерных наук

Кафедра вычислительной техники

Отчет по лабораторной работе № 1

Делегаты и события

Выполнил студент гр. 220201

Геворгян Д.Р.

Проверил доц. кафедры ВТ 

Савин Н.И. 

Тула 2021

1. Цель работы.

Изучить делегаты и события и применить на практике.

2. Теоретические сведения.

Делегат — это вид класса, предназначенный для хранения ссылок на методы. Делегат, как любой класс , можно передать в качестве параметра, а затем вызвать инкапсулированный в нем метод. Делегаты используются для поддержки событий, а также как самостоятельная конструкция языка (в том числе в многопоточных приложениях).

Описание делегатов:

Описание делегата задает сигнатуру методов, которые могут быть вызваны с его помощью:

[ атрибуты ] [ спецификаторы ] delegate тип имя_делегата ( [ параметры ] )

Допускаются спецификаторы new, public, protected, internal и private. Тип описывает возвращаемое значение методов, вызываемых с помощью делегата, а необязательными параметрами делегата являются параметры этих методов. Делегат может хранить ссылки на несколько методов и вызывать их поочередно; естественно, что сигнатуры всех методов должны совпадать. Пример описания делегата: public delegate void D ( int i );

Здесь описан тип делегата, который может хранить ссылки на методы, возвращающие void и принимающие один параметр целого типа. Объявление делегата можно размещать непосредственно в пространстве имен или внутри класса.

3. Контрольные вопросы.

3.1. [атрибуты] [спецификаторы] delegate тип имя_делегата ([параметры]) – синтаксис делегата. Для добавления метода в делегат применяется операция += или -=.

3.2. Делегаты применяются в основном для таких способов:

  • Получения возможности определять вызываемый метод не при компиляции, а во время выполнения программы;

  • Обеспечения связи между объектами по типу "источник — наблюдатель";

  • Создания универсальных методов, в которые можно передавать другие методы;

  • Поддержки механизма обратных вызовов.

3.3. С делегатами одного типа можно выполнять операции простого и сложного присваивания.

3.4. Событие — это элемент класса, позволяющий ему посылать другим объектам уведомления об изменении своего состояния. При этом для объектов, являющихся наблюдателями события, активизируются методы-обработчики этого события. Обработчики должны быть зарегистрированы в объекте-источнике события. Таким образом, механизм событий формализует на языковом уровне паттерн "наблюдатель", который рассматривался в предыдущем разделе. Механизм событий можно также описать с помощью модели "публикация — подписка": один класс , являющийся отправителем ( sender ) сообщения, публикует события, которые он может инициировать, а другие классы, являющиеся получателями (receivers) сообщения, подписываются на получение этих событий. События построены на основе делегатов: с помощью делегатов вызываются методы-обработчики событий. Поэтому создание события в классе состоит из следующих частей:

  • описание делегата, задающего сигнатуру обработчиков событий;

  • описание события;

  • описание метода (методов), инициирующих событие. Синтаксис события похож на синтаксис делегата:

[ атрибуты ] [ спецификаторы ] event тип имя_события

Для событий применяются спецификаторы new, public, protected, internal, private, static, virtual, sealed, override, abstract и extern. Например, так же как и методы, событие может быть статическим ( static ), тогда оно связано с классом в целом, или обычным — в этом случае оно связано с экземпляром класса. Тип события — это тип делегата, на котором основано событие.

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

3.6. Делегат — это вид класса, предназначенный для хранения ссылок на методы. Делегат, как любой класс , можно передать в качестве параметра, а затем вызвать инкапсулированный в нем метод. Делегаты используются для поддержки событий, а также как самостоятельная конструкция языка (в том числе в многопоточных приложениях). Описание делегатов Описание делегата задает сигнатуру методов, которые могут быть вызваны с его помощью:

[атрибуты] [спецификаторы] delegate тип имя_делегата ([параметры])

Допускаются спецификаторы new, public, protected, internal и private. Тип описывает возвращаемое значение методов, вызываемых с помощью делегата, а необязательными параметрами делегата являются параметры этих методов. Делегат может хранить ссылки на несколько методов и вызывать их поочередно; естественно, что сигнатуры всех методов должны совпадать. Пример описания делегата: public delegate void D ( int i );

Здесь описан тип делегата, который может хранить ссылки на методы, возвращающие void и принимающие один параметр целого типа. Объявление делегата можно размещать непосредственно в пространстве имен или внутри класса.

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

Механизм событий можно также описать с помощью модели "публикация — подписка": один класс , являющийся отправителем ( sender ) сообщения, публикует события, которые он может инициировать, а другие классы, являющиеся получателями (receivers) сообщения, подписываются на получение этих событий.

Вывод: Делегаты и события изучены и применены на практике


написать администратору сайта