8 Язык С# (делегаты и события).ppt
- Количество слайдов: 17
Делегаты
Что это? int (*ptrf) (int, int);
Структура делегата public delegate int Binary. Op(int x, int y); 1. Имя делегата. 2. Сигнатура формальных параметров. 3. Тип возвращаемого значения.
Класс – источник функций public class My. Math { public static int Add(int p 1, int p 2) { return p 1 + p 2; } public static int Subtract(int p 1, int p 2) { return p 1 - p 2; } public static int Inversion(int p 1) { return -p 1; } }
Использование делегата public delegate int Binary. Op(int x, int y); static void Main(string[] args) { Binary. Op my. Op 1 = new Binary. Op(My. Math. Add); Binary. Op my. Op 2 = new Binary. Op(My. Math. Subtract); Binary. Op my. Op 3 = new Binary. Op(My. Math. Inversion); Console. Write. Line("{0}", my. Op 1(1, 1)); Console. Write. Line("{0}", my. Op 2(1, 1)); Console. Write. Line("{0}", my. Op 3(1)); }
События в C#
Этапы определения события 1. Объявление делегата, который будет указывать на метод, вызываемый при наступлении соответствующего события. 2. Объявление события в терминах соответствующего делегата.
Формат объявления события public event <имя_делегата> <имя_события>;
Пример объявления события public class My. Math. Abstract { public delegate int Binary. Op(int x, int y); public event Binary. Op Calculate; public void Function(int p 1, int p 2) { Console. Write. Line("{0}", Calculate(1, 1)); } }
Класс – источник функций public class My. Math. Implement { public static int Add(int p 1, int p 2) { return p 1 + p 2; } public static int Subtract(int p 1, int p 2) { return p 1 - p 2; } }
Использование событий static void Main(string[] args) { My. Math. Abstract M 1 = new My. Math. Abstract(); M 1. Calculate += new My. Math. Abstract. Binary. Op(My. Math. Implement. Add); M 1. Function(1, 1); }
Варианты регистрации событий M 1. Calculate += new My. Math. Abstract. Binary. Op(My. Math. Implement. Add); M 1. Calculate += My. Math. Implement. Add; M 1. Calculate += delegate(int p 1, int p 2) { return p 1 + p 2; };
Рекомендуемая структура параметров делегата 1. Первый параметр должен иметь тип System. Object и возвращать объект, который является источником события. 2. Второй параметр должен являться экземпляром класса, производного от класса System. Event. Args и содержать в себе необходимые параметры для обработки события.
Класс, содержащий параметры делегата public class My. Math. Args : System. Event. Args { public int x; public int y; public My. Math. Args(int p 1, int p 2) { x = p 1; y = p 2; } }
Пример определения события public class My. Math. Abstract { public delegate int Binary. Op(System. Object sender, My. Math. Args e); public event Binary. Op Calculate; public void Function(int p 1, int p 2) { Console. Write. Line("{0}", Calculate(this, new My. Math. Args(1, 1))); } }
Класс - источник функций public class My. Math. Implement { public static int Add(System. Object sender, My. Math. Args e) { return e. x + e. y; } public static int Subtract(System. Object sender, My. Math. Args e) { return e. x - e. y; } }
Использование событий static void Main(string[] args) { My. Math. Abstract M 1 = new My. Math. Abstract(); M 1. Calculate += new My. Math. Abstract. Binary. Op(My. Math. Implement. Add); M 1. Function(1, 1); }