Скачать презентацию Делегаты Что это int ptrf int int Скачать презентацию Делегаты Что это int ptrf int int

8 Язык С# (делегаты и события).ppt

  • Количество слайдов: 17

Делегаты Делегаты

Что это? int (*ptrf) (int, int); Что это? int (*ptrf) (int, int);

Структура делегата public delegate int Binary. Op(int x, int y); 1. Имя делегата. 2. Структура делегата public delegate int Binary. Op(int x, int y); 1. Имя делегата. 2. Сигнатура формальных параметров. 3. Тип возвращаемого значения.

Класс – источник функций public class My. Math { public static int Add(int p Класс – источник функций 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) Использование делегата 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# События в C#

Этапы определения события 1. Объявление делегата, который будет указывать на метод, вызываемый при наступлении Этапы определения события 1. Объявление делегата, который будет указывать на метод, вызываемый при наступлении соответствующего события. 2. Объявление события в терминах соответствующего делегата.

Формат объявления события public event <имя_делегата> <имя_события>; Формат объявления события public event <имя_делегата> <имя_события>;

Пример объявления события public class My. Math. Abstract { public delegate int Binary. Op(int Пример объявления события 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 Класс – источник функций 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 Использование событий 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. Варианты регистрации событий 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 и возвращать Рекомендуемая структура параметров делегата 1. Первый параметр должен иметь тип System. Object и возвращать объект, который является источником события. 2. Второй параметр должен являться экземпляром класса, производного от класса System. Event. Args и содержать в себе необходимые параметры для обработки события.

Класс, содержащий параметры делегата public class My. Math. Args : 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. Пример определения события 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. Класс - источник функций 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 Использование событий 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); }