Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч
Download 2.46 Mb.
|
Язык программирования 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling