Делегаты и события - 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);