Есть два класса, у каждого свой метод для вывода информации, в обеих вызывается метод который связан на метод другого класса.
Вопрос в том, как убрать переполнение стека.
Задание 6.20 Лабораторная работа. Делегаты
Задания
• 2 класса Ping и Pong
• один уведомляет другого, о том, что "произошёл пинг", другой - о том, что "произошёл понг",
• одна пара объектов "играют" между собой, другая пара - между собой и т.д.
и выводить на консоль соответсвующие сообщения, что-то вроди такого:
Ping received Pong.
class Program
{
class Pong
{
public delegate void Ud();
public event Ud Vivod;
public void Udar()
{
Console.WriteLine("Понг отбил пинг");
if (Vivod != null)
Vivod();
}
}
class Ping
{
public delegate void Ud();
public event Ud Vivod;
public void Udar()
{
Console.WriteLine("Пинг отбил понг");
if (Vivod != null)
Vivod();
}
}
static void Main(string[] args)
{
Ping ping = new Ping();
Pong pong = new Pong();
Ping.Ud v = pong.Udar;
Pong.Ud vi = ping.Udar;
ping.Vivod += v;
pong.Vivod += vi;
ping.Udar();
}
}
Что-то такое получилось
class PingPong
{
private readonly string _nameMe;
private readonly string _nameOpponent;
public PingPong(string nameMe, string nameOpponent)
{
_nameMe = nameMe;
_nameOpponent = nameOpponent;
}
public delegate void KnockHandler();
public event KnockHandler Knock;
public void KnockHandlerInstance()
{
Console.WriteLine($"{_nameMe} received {_nameOpponent}");
}
public void RaiseKnock()
{
Knock?.Invoke();
}
}
class PingPongFactory
{
private void RunPingPong(PingPong ping, PingPong pong)
{
while (true)
{
ping.RaiseKnock();
Task.Delay(TimeSpan.FromSeconds(1)).Wait();
pong.RaiseKnock();
Task.Delay(TimeSpan.FromSeconds(1)).Wait();
}
}
public Task LaunchPair(int id)
{
var pingName = $"Ping{id}";
var pongName = $"Pong{id}";
PingPong ping = new PingPong(pingName, pongName);
PingPong pong = new PingPong(pongName, pingName);
ping.Knock += pong.KnockHandlerInstance;
pong.Knock += ping.KnockHandlerInstance;
Task result = new Task(() => RunPingPong(ping, pong));
return result;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("==ConsoleAppPingPong==");
Console.WriteLine("Для начала нажмите Ввод");
Console.ReadLine();
PingPongFactory factory = new PingPongFactory();
Task task1 = factory.LaunchPair(1);
task1.Start();
Task task2 = factory.LaunchPair(2);
task2.Start();
task1.Wait();
task2.Wait();
Console.ReadLine();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Использую DataTables и ajax-запросом хочу отобразить таблицу, передав данные в json
Всем привет, сделал приложение Windows Form на с#При запуске программа должна автоматически загружаться пр входе пользователя в систему
Что лучше использовать для сортировки IComparer или IComparable?Можете сказать что из них лучше использовать и почему? Лично я сам не совсем понял что...