- •К лабораторной работе 2 по ооп
- •Часть 1. Делегаты и события в языке с# Делегаты
- •Задание
- •События
- •1. Событие и обработчик в одном классе (источник является и приёмником)
- •2. Событие и обработчик в разных классах (источник отделён от приёмника)
- •3. Событие с объектом данных
- •Задание
- •Часть 2. События в языке Java Делегирование одного обработчика
- •Делегирование многих обработчиков (Реализация события со многими слушателями)
- •Интерфейс и класс нашего события, суперкласс классов источников нашего события, классы источника и приёмника нашего события
- •Задание
- •Часть 3. Потоки в языке с# Поток
- •Потоковые объекты
- •Задание
- •Часть 4. Потоки в языке Java Поток
- •Потоковые объекты
- •Задание
События
1. Событие и обработчик в одном классе (источник является и приёмником)
using System;
// Делегат события
delegate void DelEv (int x, string s);
class TestEv
{
public event DelEv ev; // Ссылка на объект события
static void Main ()
{
TestEv tE= new TestEv (); //Создать объект типа TestEv
// Подписать обработчик на событие ev
tE.ev +=new DelEv (tE.Handler);
// Генерировать событие
tE.ev (4,"four");
}
// Обработчик события
void Handler (int a, string b)
{
Console.WriteLine ("a= " + a + " b= "+ b);
}
}
2. Событие и обработчик в разных классах (источник отделён от приёмника)
using System;
// Делегат события
delegate void DelEv (int x, string s);
class Source // Класс источника события
{
public event DelEv ev; // Ссылка на объект события
// Функция генерирования события
public void Fire (int x, string s)
{
if(ev != null) ev (x, s);
}
}
class Receiver // Класс приёмника события
{
// Обработчик события
public void Handler (int a, string b)
{
Console.WriteLine ("a= " + a + " b= "+ b);
}
}
class TestEv
{
static void Main ()
{
Source s= new Source (); // Создать источник события
Receiver r= new Receiver (); // Создать приёмник события
// Подписать обработчик на событие ev
s.ev +=new DelEv (r.Handler);
// Генерировать событие
s.Fire (5,"five");
}
}
3. Событие с объектом данных
using System;
// Делегат события
delegate void DelEv (int x, string s);
class OurEventArgs: EventArgs // Класс данных события
{
private int x;
private String s;
public OurEventArgs (int X, String S)
{x= X; s= S;}
public int X {get{return x;}}
public String S{get{return s;}}
}
class Source
{
public event EventHandler ev; // Ссылка на объект события
// Функция генерирования события
public void Fire (int x, string s)
{
// Создать объект данных события
OurEventArgs oE= new OurEventArgs (x, s);
// Сгенерировать событие
if(ev != null) ev (this, oE);
}
}
class Receiver
{
// Обработчик события
public void Handler (object sender, EventArgs oE)
{
// Получить объект данных события
OurEventArgs oea= (OurEventArgs)oE;
Console.WriteLine ("a= " + oea.X + " b= "+ oea.S);
}
}
class TestEv
{
static void Main ()
{
Source s= new Source (); // Создать источник события
Receiver r= new Receiver (); // Создать приёмник события
// Подписать обработчик на событие ev
s.ev +=new EventHandler (r.Handler);
// Генерировать событие
s.Fire (5,"five");
}
}
Задание
Выполнить приведённую программу с делегатами. Модифицировать её, дополнив классом со статической и обычной функцией и использовав делегаты с этими функциями.
Выполнить приведённые программы с событиями. Модифицировать их в соответствии с указаниями преподавателя.
Создать программу с одним источником и массивом приёмников. Обработчики приёмников должны выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.
Создать программу с массивом источников и одним приёмником. Обработчик приёмника должен выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.
Создать программу с массивом источников и массивом приёмников. Обработчики приёмников должны выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.
Создать программу, состоящую из источника и цепочки приёмников-источников, обеспечивающих передачу сообщений в соответствии с алгоритмом, указанным преподавателем.