Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.работа 2a с C# и Java.doc
Скачиваний:
3
Добавлен:
17.08.2019
Размер:
144.9 Кб
Скачать

События

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");

}

}

Задание

  1. Выполнить приведённую программу с делегатами. Модифицировать её, дополнив классом со статической и обычной функцией и использовав делегаты с этими функциями.

  1. Выполнить приведённые программы с событиями. Модифицировать их в соответствии с указаниями преподавателя.

  1. Создать программу с одним источником и массивом приёмников. Обработчики приёмников должны выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.

  1. Создать программу с массивом источников и одним приёмником. Обработчик приёмника должен выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.

  1. Создать программу с массивом источников и массивом приёмников. Обработчики приёмников должны выдать на консоль дополнительно к данным события также номер объекта источника и номер объекта приёмника.

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