using System;
using System.Collections.Generic;
namespace ConsoleApp3.EventHandler
{
public class MyEventHandlerDic
{
private Dictionary> dic
= new Dictionary>();
public void Register(int key, EventHandler newHandler)
{
if (this.dic.ContainsKey(key))
{
this.dic[key] += newHandler;
}
else
{
this.dic.Add(key, newHandler);
}
}
public void Unregister(int key, EventHandler newHandler)
{
if (this.dic.ContainsKey(key))
{
this.dic[key] -= newHandler;
}
}
public void Run()
{
foreach (var keyValue in this.dic)
{
keyValue.Value?.Invoke(null, keyValue.Key);
}
}
}
public class Runner
{
public int Key { get; set; }
public void Update(object obj, int arg)
{
Console.WriteLine($"key:{this.Key} arg:{arg}");
}
}
public static class EventHandlerTest
{
public static void Run()
{
var handlerDic = new MyEventHandlerDic();
Runner r1 = new Runner { Key = 1 };
Runner r2 = new Runner { Key = 2 };
Runner r3 = new Runner { Key = 3 };
Runner r4 = new Runner { Key = 4 };
Runner r5 = new Runner { Key = 5 };
handlerDic.Register(1, r1.Update);
handlerDic.Register(1, r2.Update);
handlerDic.Run();
Console.WriteLine(1);
handlerDic.Unregister(1, r2.Update);
handlerDic.Run();
Console.WriteLine(2);
handlerDic.Unregister(1, r1.Update);
handlerDic.Run();
Console.WriteLine(3);
handlerDic.Register(2, r2.Update);
handlerDic.Register(3, r3.Update);
handlerDic.Run();
Console.WriteLine(4);
}
}
}
key:1 arg:1
key:2 arg:1
1
key:1 arg:1
2
3
key:2 arg:2
key:3 arg:3