Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet55/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   51   52   53   54   55   56   57   58   ...   91
Bog'liq
Язык программирования C#

12.6. Создание и использование событий

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


delegate void CompareEventHandler();
Лист. 3.14
Теперь, используя этот делегат, можно создать событие. Для создания событий используется ключевое слово event. К событиям применимы все спецификаторы доступа: public, private и protected. События также могут быть статическими экземплярными и виртуальными, участвуя в отношения наследования.
class EqualityChecker
{
public static event CompareEventHandler OnEquality;
public static event CompareEventHandler OnUnquality;
public static void Check(float x, float y)
{
if (x == y)
{
if (OnEquality != null)
OnEquality();
}
else
{
if (OnUnquality != null)
OnUnquality();
}
}
}
Лист. 3.15
В этом классе объявлены два статических события, имеющих тип делегата CompareEventHandler: OnEquality, OnUnquality.

public static event CompareEventHandler OnEquality;


public static event CompareEventHandler OnUnquality;
Лист. 3.16

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


class EventSource
{
public static void ShowEquality()
{
Console.WriteLine("Числа равны.");
}

public static void ShowUnequality()


{
Console.WriteLine("Числа не равны.");
}
}
Лист. 3.17

Продемонстрируем работу событий. Для этого свяжем их с исполнителями из класса EventSource и затем вызовем их.


class Program


{
static void Main(string[] args)
{
EqualityChecker.OnEquality +=
new CompareEventHandler(EventSource.ShowEquality);
EqualityChecker.OnUnquality +=
new CompareEventHandler(EventSource.ShowUnequality);

EqualityChecker.Check(3, 3);


EqualityChecker.Check(2, 3);
}
}
Лист. 3.18
Связывание происходит в следующих двух строках кода.

EqualityChecker.OnEquality +=


new CompareEventHandler(EventSource.ShowEquality);
EqualityChecker.OnUnquality +=
new CompareEventHandler(EventSource.ShowUnequality);
Лист. 3.19
Оно идентично связыванию функции с делегатом. Но при связывании функций с событиями нельзя использовать оператор =, разрешены лишь += для добавления функции и -= для её удаления. События нельзя вызывать извне класса, в котором это событие определено, поэтому в этом примере дважды вызывается статический метод EqualityChecke.Check(int, int).
EqualityChecker.Check(3, 3);
EqualityChecker.Check(2, 3);
Лист. 3.20
В этом методе и вызываются функции, связанные с делгатом.
if (x == y)
{
if (OnEquality != null)
OnEquality();
}
else
{
if (OnUnquality != null)
OnUnquality();
}
Лист. 3.21
Перед каждой генерацией события нужно сделать проверку на неравенство его null, т.е было ли это событие связано с каким-либо методом.
В результате выполнения программы получим.

Числа равны.


Числа не равны.
Вывод. 3.4

Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   51   52   53   54   55   56   57   58   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling