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.7 委托在回调中的应用 - 图1

上述的回调过程,使用图示表示如下,如图15-6所示。

15.7 委托在回调中的应用 - 图2

图 15-6 回调函数图示