A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔克 黑马帝   /  2011-12-12 17:58  /  2392 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

.net委托支持多路广播?
多路广播是什么啊

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

3 个回复

倒序浏览
付炯 黑马帝 2011-12-12 18:55:25
沙发
我想你问的应该是多播委托吧
引用多个方法的委托称为多播委托 调用时连续调用每个方法 其中每个委托必须是同类型的 且返回值必须为void
C#的事件处理委托是多播的 事件处理方法可以不必在生成事件的类中定义 保证事件处理程序可以放在不同类中

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
余飞 黑马帝 2011-12-12 19:04:58
藤椅
指的多播委托吧  ....委托也可以包含多个方法,这种委托称为多播委托.调用多播委托,就可以按顺序连续调用多个方法。为此,委托的签名就必须返回 void ;

可以搜下  一瓶牛奶和一张报纸引发的“委托”事件

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
何旭 黑马帝 2011-12-12 22:36:30
板凳
本帖最后由 何旭 于 2011-12-12 22:38 编辑

介于论坛上有很多人,提到委托,以及委托的多播!
小弟不才,写了一遍关于委托的博客
地址是: http://www.cnblogs.com/cilence/archive/2011/12/12/2285363.html


谈到委托,那么首先我们要知道什么是委托,委托能做什么事,如果做!

先说什么是委托,委托的定义:

  通俗的来说,委托就是一个能存放某种特定格式(方法的签名,如返回值,参数)的方法指针清单。

  微软官方的解释是,delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。

下面我们来讲述一个使用委托过滤字符数组的案例:
  1. namespace 委托
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             //定义一个待过滤的字符串
  8.             string text = "XXX等待过BBB滤的字符串";
  9.             //实例化一个委托,将Filter1方法的指针作为引用
  10.             FilterDelegate filter = new FilterDelegate(Filter1);
  11.             //实例化一个委托,将Filter2方法的指针作为引用
  12.             FilterDelegate filter2 = new FilterDelegate(Filter2);

  13.             //执行方法
  14.             string fileter1result = filter(text);
  15.             Console.WriteLine(fileter1result);
  16.             Console.WriteLine(filter2(fileter1result));

  17.             Console.WriteLine();


  18.             //以下是多播委托
  19.             //委托对象的一个有用属性是:可以使用 + 运算符将多个对象分配给一个委托实例

  20.             //声明多个委托
  21.             DoubleDelegate double1, double2, double3;
  22.             double1 = Hello;
  23.             double2 = double1 + Bye;
  24.             double3 = double2 - Hello;

  25.             Console.WriteLine("打印double1:");
  26.             double1("A");
  27.             Console.WriteLine("打印double2:");
  28.             double2("B");
  29.             Console.WriteLine("打印double3:");
  30.             double3("C");


  31.             Console.ReadKey();

  32.             /*总结:
  33.              *delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针.
  34.              */
  35.         }

  36.         //过滤策略1
  37.         static string Filter1(string value) {
  38.             return value.Replace("XXX","太好了");
  39.         }

  40.         //过滤策略2
  41.         static string Filter2(string value)
  42.         {
  43.             return value.Replace("BBB", "好");
  44.         }

  45.         static void Hello(string s) {
  46.             Console.WriteLine("Hello:{0}!",s);
  47.         }

  48.         static void Bye(string s) {
  49.             Console.WriteLine("Bye:{0}!", s);
  50.         }
  51.     }

  52.     /*1.首先声明一个委托
  53.      *delegate表示该类型是委托类型
  54.      *string 是委托引用方法的方法返回值
  55.      *string value 是委托引用方法的方法参数
  56.      **/
  57.     delegate string FilterDelegate(string value);

  58.     //一个多播委托
  59.     delegate void DoubleDelegate(string s);
  60. }
复制代码

未命名.jpg (19.02 KB, 下载次数: 52)

未命名.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马