打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
多播委托

所有的委托实例都有多播的功能。所谓多播,就像一群程序员在瞬聘网填好了求职意向后,某天有个公司发布了一个和这些程序员求职意向刚好相匹配的工作,然后这些求职者都被通知了 - “有一份好工作招人啦,你们可以直接申请去上班了!”。

也就是说,一个委托实例不仅可以指向一个方法,还可以指向多个方法。例如:

MyDelegate d = MyMethod1;// “+=” 用来添加,同理“-=”用来移除。 d += MyMethod2;// d -= MyMethod2 

调用时,按照方法被添加的顺序依次执行。注意,对于委托,+= 和 -= 对null是不会报错的,如:

MyDelegate d; d += MyMethod1;// 相当于MyDelegate d = MyMethod1;

为了更好的理解多播在实际开发中的应用,我用模拟瞬聘网的职位匹配小工具来做示例。在职位匹配过程中会有一段处理时间,所以在执行匹配的时候要能看到执行的进度,而且还要把执行的进度和执行情况写到日志文件中。在处理完一个步骤时,将分别执行两个方法来显示和记录执行进度。

我们先定义一个委托(ProgressReporter),然后定义一个匹配方法(Match)来执行该委托中的所有方法。如下:

public delegate void ProgressReporter(int percentComplete);public class Utility{           public static void Match(ProgressReporter p)       {                       if (p != null)                {                                for (int i = 0; i <= 10; i++)                  {                                         p(i * 10);                                         System.Threading.Thread.Sleep(100);                                }                        }             }}

然后我们需要两个监视进度的方法,一个把进度写到Console,另一个把进度写到文件。如下:

class Program {    static void Main(string[] args) {        ProgressReporter p = WriteProgressToConsole;        p += WriteProgressToFile;        Utility.Match(p);        Console.WriteLine("Done.");        Console.ReadKey();    }    static void WriteProgressToConsole(int percentComplete) {        Console.WriteLine(percentComplete+"%");    }    static void WriteProgressToFile(int percentComplete) {        System.IO.File.AppendAllText("progress.txt", percentComplete + "%");    }}

运行结果:

 

看到这里,是不是发现你已然更加爱上C#了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
大白话系列之C#委托与事件讲解(一)
Delegate委托之学习心得
.NET多线程 传入参数与获取返回值
C# Task 用法
从栈和堆中来看值传递和引用传递
C#:代表(delegate)和事件(event) (转)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服