zoukankan      html  css  js  c++  java
  • 多播委托

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

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

    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#了。

  • 相关阅读:
    起步学习软件开发(.Net 方向)的指导
    Lesktop开源JS控件库
    软件岗位职责
    asp.net 获取网站根目录总结
    微软是怎样做测试的
    打造WebIM
    CodeSmith 系列一
    Crack .NET
    Visual Studio IDE 实用小技巧3
    程序员公司的选择
  • 原文地址:https://www.cnblogs.com/XiaoRuLiang/p/12422756.html
Copyright © 2011-2022 走看看