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