15.7 委托在回调中的应用
要理解委托在回调中的应用,首先需要了解什么是回调。以普遍手机为例,我们可以把手机号码告知别人,这样别人就可以随时联系到我们,“有事你call我”描述的就是“回调”这一过程。接下来,看看委托如何应用在回调过程中:假设一个工作人员要在3个打印机上打印文件,但是他很忙,以至于没时间查看每个打印机是否打印完毕,他希望每个打印机在打印结束时能发出一个通知,如代码清单15-5所示。
代码清单15-5 委托在回调中的应用
1///<summary>
2///委托,指示打印完毕,并显示通知
3///</summary>
4///<param name="message"></param>
5 public delegate void PrintCompleteCallback(string message);
6
7///<summary>
8///工作人员类
9///</summary>
10 class Worker
11{
12 Printer printer1,printer2,printer3;
13 public void DoWork()
14{
15 printer1=new Printer(“1号打印机”);
16 printer2=new Printer(“2号打印机”);
17 printer3=new Printer(“3号打印机”);
18
19 PrintCompleteCallback callback=new PrintCompleteCallback(Printer.Notify);
20 printer1.Print(callback);
21 printer2.Print(callback);
22 printer3.Print(callback);
23}
24
25 public static void Main()
26{
27 Worker worker=new Worker();
28 worker.DoWork();
29}
30}
31
32///<summary>
33///打印机类
34///</summary>
35 class Printer
36{
37 private string_name;
38 public Printer(string name)
39{
40_name=name;
41}
42
43 public void Print(PrintCompleteCallback callback)
44{
45//打印完毕
46 callback(string.Format(“{0}打印完毕。”,_name));
47}
48
49 public static void Notify(string message)
50{
51 System.Console.WriteLine(message);
52}
53}
上述代码的运行结果为:
1号打印机打印完毕。
2号打印机打印完毕。
3号打印机打印完毕。
关于代码清单15-4的说明如表15-3所示。
上述的回调过程,使用图示表示如下,如图15-6所示。
图 15-6 回调函数图示