需求场景

在对象A中注册消息,指定回调函数

在对象B中解释消息,调用对应的回调函数,附上对应的参数对象

定义

  1. public delegate void MessengerDelegate(object o);
  2. public static class Messenger
  3. {
  4. public static Dictionary<string, MessengerDelegate> MailBox = new Dictionary<string, MessengerDelegate>();
  5.  
  6. public static void Parser(string key, object o)
  7. {
  8. MessengerDelegate d;
  9. if (MailBox.TryGetValue(key, out d))
  10. d(o);
  11. else
  12. {
  13. throw new KeyNotFoundException();
  14. }
  15. }
  16.  
  17. public static void Regist(string key, MessengerDelegate d)
  18. {
  19. MailBox.Add(key, d);
  20. }
  21. public static void Del(string key)
  22. {
  23. MailBox.Remove(key);
  24.  
  25. }
  26. }

Messager.cs

测试

  1. public void func1(object o)
  2. {
  3. Console.WriteLine("{0}", o);
  4. }
  5.  
  6. public UnitTest1()
  7. {
  8. string name="MainModel";
  9. Messanger.Register(name, func1);
  10.  
  11. Messanger.Parser(name, "hello A");
  12. Messanger.Parser(name, "hello B");
  13. }

好处
对于一些特殊异步场景比较有用,比如基于TCP的通信的上层应用

缺点

实时性差一点?(感觉)

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

C#基于委托的带参数的消息传递设计的更多相关文章

  1. 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程

    额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...

  2. Struts2 动态结果和带参数的跳转

    完整代码:Struts16ActionResultsDemo.rar 1.动态结果. 有时我们需要在Action里取得我个要转跳的页面 看一下我们的struts.xml <?xml versio ...

  3. SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...

  4. C#线程调用带参数的方法

    在 .NET Framework 2.0 版中,要实现线程调用带参数的方法有两种办法.第一种:使用ParameterizedThreadStart.调用 System.Threading.Thread ...

  5. less新手入门(二) Mixin 混合、带参数的Mixin

    四.mixin  混合 "mix - in"属性来自现有的样式!! 你可以在类选择器和id选择器中使用mixin, .a,#b{ color: rebeccapurple; } . ...

  6. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  7. c#基础,单线程,跨线程访问和线程带参数

    using System; using System.Collections.Generic; using System.Threading; using System.Windows.Forms; ...

  8. 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...

  9. 使用rewrite 让php 实现类似asp.net 的IHttpModule 进行带参数js文件的参数获取

    asp.net 的IHttpModule 接口具有很大的作用,我们可以使用实现的模块进行全局的控制,但是在学习php 的过程中也想实现类似的功能,查找php 的文档,自己没有找到, 但是我们大家应该知 ...

随机推荐

  1. Android Studio ---------------常用快捷键(更新中。。。。。。)

    ##常用快捷键: Ctrl+X(或Y) 删除行 Ctrl+D 复制行 Ctrl+Alt+L 格式化代码 Ctrl + Alt + V 提取变量 Shift+F6 重命名 Ctrl+F12显示当前文件的 ...

  2. visifire 图表双坐标轴 silverlight

    public void CreateChart(Grid oGrid, ObservableCollection<ListItem> lBaseOilBar)        {       ...

  3. UI基础视图----UIImageView总结

    UIImageView和UILabel一样,也是UIKit框架中非常常用的视图类.继承关系和UILabel完全一致(都是继承于UIView),功能也相似(用户交互都默认为关,主要用于展示),只不过UI ...

  4. [原创]旧事重提:只配置参数实现OAuth2登录

    其实这个组件写出来很长时间了,有几个月吧,一直在 MrHuo工作室  上放着,一直说要整理,太忙没时间. 另外,关于OAuth2的一些基础内容还请从网上找找资料,太多了,写的累赘. 废话不多说,先上图 ...

  5. JedisPool操作

    Jedis 使用 commons-pool 完成池化实现. 先做个配置文件(properties文件): #最大分配的对象数 redis.pool.maxActive=1024 #最大能够保持idel ...

  6. uva 10061 How many zero's and how many digits ?

    How many zeros and how many digits? Input: standard input Output: standard output Given a decimal in ...

  7. eclipse 添加jar包的方式

    参考资料地址:http://blog.csdn.net/mazhaojuan/article/details/21403717

  8. myeclipse10 如何把代码预览的窗口去掉

    1,选择菜单: windows -> preferences2,在弹出窗口中选择General-> Editors -> FileAssociations3,在上方框内选择*.jsp ...

  9. python代码风格规范

    类注释模板: :: class AnotherClass: """ 类注释 """ def method(self, arg1, arg2, ...

  10. ANSIC程序到KeilC51的移植心得

    摘要:本文讲述了将ANSIC程序移植到KeilC51上应该注意的事项.文章讲述了存储类型.指针类型.重入函数.根据目标系统RAM的分布的段定位和仿真栈设置.函数指针.NULL指针问题.字节顺序.交叉汇 ...