Делегаты и события - C# (180223)
Формулировка задачи:
Здравствуйте! Хотелось бы разобраться в событиях исключительно на примере делегатов. Но вот вопрос, ожидаю на выходе:
"Metod1:Сообщение для подписчика"
"Metod2:Сообщение для подписчика" и т.д.
а получаю просто:
"Metod1:"
"Metod2:"
"Metod3:"
Может кто подскажет в чем дело? или так и должно быть, пример это не мой, но с моими модификациями незначительными. И вообще буду рада, если кто-то по этому примеру даст хорошее объяснение) Заранее благодарю!
Листинг программы
- delegate void MYDELEGATE(string msg);
- namespace ConsoleApplication1
- {
- //класс издатель
- class CLASS_ISDATEL
- {
- MYDELEGATE podpishik;
- //метод для регистрации подписчика
- public void Add_podpishik(MYDELEGATE podp)
- {
- if (podpishik == null) podpishik = podp;
- else podpishik = (MYDELEGATE)Delegate.Combine(podpishik, podp);
- }
- //метод для удаления подписчика
- public void Remove_podpishik(MYDELEGATE podp)
- {
- if (podpishik != null)
- podpishik = (MYDELEGATE)Delegate.Remove(podpishik, podp);
- }
- //метод для генерация события
- public void MYEvent()
- {
- //если делегат ссылается хотя бы на один метод, то вызываем его
- if (podpishik != null)
- {
- podpishik("Сообщение для подписчика");
- }
- }
- }
- class TEST
- {
- //обработчик события 1
- public static void Method1(string msg)
- {
- Console.WriteLine("Method1: ", msg);
- }
- //обработчик события 2
- public static void Method2(string msg)
- {
- Console.WriteLine("Method2: ", msg);
- }
- //обработчик события 3
- public static void Method3(string msg)
- {
- Console.WriteLine("Method3: ", msg);
- }
- static void Main(string[] args)
- {
- Console.WriteLine("*** Делегаты и События ***");
- //создаем делегаты
- MYDELEGATE dg1 = Method1;
- MYDELEGATE dg2 = Method2;
- MYDELEGATE dg3 = Method3;
- //создаем экземпляр класса-издателя
- CLASS_ISDATEL objectIsdatel = new CLASS_ISDATEL();
- //регистрация подписчиков
- objectIsdatel.Add_podpishik(dg1);
- objectIsdatel.Add_podpishik(dg2);
- objectIsdatel.Add_podpishik(dg3);
- //генерируем событие
- objectIsdatel.MYEvent();
- Console.ReadLine();
- //удаляем подписчиков
- objectIsdatel.Remove_podpishik(dg3);
- Console.WriteLine("удаление подписчика 3");
- objectIsdatel.MYEvent();
- objectIsdatel.Remove_podpishik(dg2);
- Console.WriteLine("удаление подписчика 2");
- objectIsdatel.MYEvent();
- objectIsdatel.Remove_podpishik(dg1);
- Console.WriteLine("удаление подписчика 1");
- objectIsdatel.MYEvent();
- Console.ReadLine();
- }
- }
- }
Решение задачи: «Делегаты и события»
textual
Листинг программы
- Console.WriteLine("Method1: {0}", msg);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д