Использование первого аргумента обработчика события - C#
Формулировка задачи:
Есть решение пункта 7, но не понимаю, как сделать 8, помогите.
7. Создать приложение, в котором генератор события может генерировать три разных события. Приемники событий выступают в качестве абонентов почтового отделения и могут пересылать друг другу информацию, используя генератор в качестве почтового ящика. При этом они указывают номер (от 1 до 3) следующего приемника и некоторое целое число, которое передается получателю. Такой цикл передачи продолжается до тех пор, пока какой либо из приемников в качестве получателя не укажет номер ноль. В этом случае приложение завершает свою работу. При запуске приложения первое почтовое извещение всегда получает от генератора первый приемник. Для адресации и передачи информации использовать второй аргумент обработчика события.
8. Выполнить задание по пункту 7, но адресации и передачи информации использовать первый аргумент обработчика события.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppTesting { public delegate void PostSendedSender(int post, int abonent); // Генератор public class PostOffice { public event PostSendedSender PostSendedTo1; public event PostSendedSender PostSendedTo2; public event PostSendedSender PostSendedTo3; public void SendMessage(int abonent, int post) { switch (abonent) { case 1: if (PostSendedTo1 != null) { PostSendedTo1(post, 1); //Console.WriteLine("Событие PostSendedTo1 произошло!"); } break; case 2: if (PostSendedTo2 != null) { PostSendedTo2(post, 2); //Console.WriteLine("Событие PostSendedTo2 произошло!"); } break; case 3: if (PostSendedTo3 != null) { PostSendedTo3(post, 3); //Console.WriteLine("Событие PostSendedTo3 произошло!"); } break; default: break; } // обнуляем подписку на все методы после посылки очередного сообщения // иначе с каждой последующей посылкой мы будет посылать +1 сообщений PostSendedTo1 = null; PostSendedTo2 = null; PostSendedTo3 = null; } } public class Abonents { static void AppendInvokations(PostOffice office) { PostSendedSender lambdaForPosting = new PostSendedSender( (postData, abonent) => { if (postData == 0) { Console.WriteLine("Послано 0 Завершаем работу..."); Environment.Exit(0); } else Console.WriteLine("Сообщение "{0}" послано абоненту {1}", postData, abonent); } ); office.PostSendedTo1 += lambdaForPosting; office.PostSendedTo2 += lambdaForPosting; office.PostSendedTo3 += lambdaForPosting; } public static void Abonent1SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 1\n-------------"); } public static void Abonent2SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 2\n-------------"); } public static void Abonent3SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 3\n-------------"); } } public class Program { public static void Main(string[] args) { PostOffice mainOffice = new PostOffice(); Abonents.Abonent1SendPost(mainOffice, 3, 100); Abonents.Abonent3SendPost(mainOffice, 1, 280); Abonents.Abonent2SendPost(mainOffice, 1, 0); } } }
Решение задачи: «Использование первого аргумента обработчика события»
textual
Листинг программы
public event EventHandler<int> Ok1; public event EventHandler<int> Ok2; public event EventHandler<int> Ok3; .... /// теперь у нас есть параметр который можно передавать в событии int param = 1; if (Ok1 != null) { Ok1(this, param); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д