C#基于委托的带参数的消息传递设计
需求场景
在对象A中注册消息,指定回调函数
在对象B中解释消息,调用对应的回调函数,附上对应的参数对象
定义
public delegate void MessengerDelegate(object o); public static class Messenger { public static Dictionary<string, MessengerDelegate> MailBox = new Dictionary<string, MessengerDelegate>(); public static void Parser(string key, object o) { MessengerDelegate d; if (MailBox.TryGetValue(key, out d)) d(o); else { throw new KeyNotFoundException(); } } public static void Regist(string key, MessengerDelegate d) { MailBox.Add(key, d); } public static void Del(string key) { MailBox.Remove(key); } }
测试
public void func1(object o)
{
Console.WriteLine("{0}", o);
}
public UnitTest1()
{
string name="MainModel";
Messanger.Register(name, func1);
Messanger.Parser(name, "hello A");
Messanger.Parser(name, "hello B");
}
好处
对于一些特殊异步场景比较有用,比如基于TCP的通信的上层应用
缺点
实时性差一点?(感觉)
等以后在评论效果,刚有的想法,欢迎讨论。
浙公网安备 33010602011771号