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);

        }
    }
Messager.cs

测试 

       
        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的通信的上层应用

缺点

实时性差一点?(感觉)

等以后在评论效果,刚有的想法,欢迎讨论。

原文地址:https://www.cnblogs.com/xiaoboz/p/4727996.html