카테고리 없음
C# EventHandler Dictionary
작은이야기
2019. 7. 9. 15:32
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