Делегаты и события - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д