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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы