C#委托

委托练习

请用Observe模式写出以下代码:   模拟水壶烧水的情况,当水的温度发出“嘟嘟”的声音。   
  看到这道题时,感觉他就是我们平时的例子,其实生活处处皆学问就看你有没有留心了。当看到题时,先想一下需要创建的对象:1、  水壶 2、 警报器

     首先要先考虑一点:既然是委托,那究竟谁是委托方?谁是监视方?发布委托的又是谁,谁来执行这个动作?理清好这个思路其实就不难了。
    其实发布委托者就是就是委托者也是被监视方,而接受委托方就是监视方也是,这个动作也是有监视方来执行的,但是,还要由发布者来发布这个命令才行。
问题搞清楚了代码就很清晰了....思路清晰了,那我们开始代码分析....

第一步:定义一个委托类...

public delegate void DelEbullition();    //定义一个沸腾的委托

第二步:定义一个发布委托类水...

public class Water
 {}        /*发布委托方, 被监视方*/

第三步:对一个接受委托方的警报器类..

public class Alarm    //定义一个警报器类
{}

下面我们来看一下参考代码:

View Code
 1 public delegate void DelEbullition();    //定义一个沸腾的委托
 2  public class studyDelegate
 3  {
 4      public static void Main()
 5      {
 6         Water w = new Water();
 7         Alarm  a = new Alarm();
 8         //发布一个水沸腾的委托
 9         w.ds = a.DDEbullition;
10         //发布一个谁没沸腾的委托
11         w.dn = a.DBEbullition;         //在传递的时候方法不能传递()
12         //开始执行
13         w.Ebullition();
14 
15      }
16  }
17  /*发布委托方,
18  被监视方*/
19  public class Water
20  {
21     public DelEbullition ds= null; //发布一个沸腾时的委托
22     public DelEbullition dn = null;//发布一个不沸腾时的委托
23     public void Ebullition()
24     {
25        for(int i = 0;i<=100;i++)
26         {
27               if(i < 90)
28              {
29                db();
30               }else
31               {
32                de();
33               }
34         }    
35     }
36  }
37  /*接受委托方
38    监视方*/
39 public class Alarm    //定义一个警报器类
40 {
41      public void DDEbullition()
42     {
43        Console.WriteLine("水烧开了,嘟嘟!");
44      }
45      public void DBEbullition()
46     {
47        Console.WriteLine("谁还没烧开,请等一会...");
48      }
49 }
原文地址:https://www.cnblogs.com/QLJ1314/p/Delegate.html