СОБЫТИЯ Лекция 1. Взаимодействие объектов 2 Взаимодействие между объектами A и B можно организовать двумя способами. 1.Объект A вызывает метод объекта.

Презентация:



Advertisements
Похожие презентации
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Advertisements

©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Высокоуровневые методы информатики и программирования Лекция 10 События.
Высокоуровневые методы информатики и программирования Лекция 9 Делегаты.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
События (events) События позволяют классу или объекту уведомлять другие классы или объекты о возникновении каких-либо ситуаций. Событие представляет собой.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
События (events) События позволяют классу или объекту уведомлять другие классы или объекты о возникновении каких-либо ситуаций. Событие представляет собой.
CобытияCобытияСобытия События представляют собой механизм, посредством которого объект имеет возможность получать информацию о происходящем вне него. Объявление.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
События События Важная роль делегатов заключается в том, что на них основана модель событий С#. Применение событий вовсе не ограничено приложениями с графическим.
ИТЕРАТОРЫ И LINQ Лекция 1. Интерфейс IEnumerable и IEnumerator Любая коллекция реализует интерфейс IEnumerable. public interface IEnumerable : IEnumerable.
Делегаты и события Лекция 10. Понятие делегата Делегат – это вид класса, объекты которого могут ссылаться на методы. Делегат может вызвать метод, на который.
§ 22 Предпочитайте статические поля классов - другим.
Особенности C# Индексаторы, события, частичные методы, расширяющие методы, сборщик мусора DraggonZ.
Делегаты Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Модель приложений.NET. Среда платформы Win32, в которой выполняется программа, называется ее процессом. Эта среда состоит из: адресного пространства,
Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]
Транксрипт:

СОБЫТИЯ Лекция 1

Взаимодействие объектов 2 Взаимодействие между объектами A и B можно организовать двумя способами. 1.Объект A вызывает метод объекта B. Направление зависимости: 2. Объект B подписывается на событие объекта A. Направление зависимости: Пример: А – кнопка, В – форма в программе. Код кнопки написан задолго до формы, поэтому взаимодействие первого типа исключается. Форма должна подписаться на событие кнопки. AB AB

Событие Событие – это метафора. На самом деле событие – это момент, когда в источнике выполняется определенный участок кода. Чтобы источник мог оповещать о каком-то событии своих подписчиков, он должен: 1.Хранить у себя перечень ссылок на методы подписчиков (делегат) и вызывать их в момент события. 2.Иметь открытое свойство, при помощи которого подписчики регистрируют свои методы (подписываются и отписываются). Все это обеспечивает член класса event – событие. 3

Пример подписки class Publisher { public event EventHandler Step; public void Run() { for (int i = 1; i < 5; i++) { Thread.Sleep(500); if (Step != null) { Step(this, EventArgs.Empty); } class Program { static void Main(string[] args) { X x = new X(); x.Step += x_Step; x.Run(); } static void x_Step(object sender, EventArgs e) { Console.WriteLine("step"); } Класс Publisher периодически издает событие Step, а класс Program слушает это событие. 4 EventHandler – библиотечный делегат. Если событие не стандартное, объявляют пользовательский делегат.

Пример пользовательского события 5 Событие Finish издается, когда спортсмен финиширует. Информация о событии включает: фамилию спортсмена, время прохождения дистанции. public class SportEventArg { public string Name { set; get; } public TimeSpan Time { set; get; } } public delegate void SportEventHandler(object source, SportEventArg e); class Publisher { public event SportEventHandler Finish; public void OnFinish(SportEventArg e) { if (Finish != null) { Finish(this, e); }

Операции подписки и отписки 6 Для событий перегружены операции += и -=, при помощи которых выполняется подписка и отписка. Операция присваивания для событий не определена. Экземпляры делегатов разных типов – синглетоны, что позволяет успешно отписываться. class Program { public static void Main() { Publisher publisher = new Publisher(); publisher.Finish += publisher_Finish; } static void publisher_Finish(object source, SportEventArg e) { }

Самостоятельно 2. Уже объявлен класс Calc, в котором есть методы Plus и Minus. class Calc { protected double Plus(double a, double b) {…} protected double Minus(double a, double b) {…} } Объявлен также тип OpArgs: class OpArgs: EventArgs { public double A, B; } Объявите класс Calc2, который наследует Calc и издает события Plused и Minused каждый раз, когда вызываются методы Plus и Minus (для этого перекройте методы Plus и Minus в производном классе). Тип событий Plused и Minused должен быть EventHandler Объявить делегат, который ссылается на произвольную бинарную операцию над целыми числами, т.е. int Op(int x, int y). Создать объект делегата и вызвать его синхронно и асинхронно.