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