读张子阳老师的委托和事件 1

                                               

                                                                没有使用委托前 

 NotDelegate  

 1 namespace 张子阳委托
 2 {
 3     class NotDelegate
 4     {
 5          public void GreetPeople(string name) 
 6         {
 7             EnglishGreeting(name);
 8         }
 9         public void EnglishGreeting(string name) 
10         {
11             Console.WriteLine("Morning  "+name);
12         }
13         //如果来了一个说中文的呢????????
14         public void ChineseGreeting(string name) 
15         {
16             Console.WriteLine("早上好  " + name);
17         }
18 
19         //我们是不是又要写个方法调用 说中文的方法
20         public void GreetPepleChinese(string name)
21         {
22             ChineseGreeting(name);
23         }
View Code
    
     按照上面这样,如果有说法语、日语..  我们是不是要继续啊 , 这样程序的性能,可扩展性?
     可能我们会想到 来个枚举 ,重载GreetPeople(string name,Language)解决上面的问题,看下面的代码
                
 1  public void GreetPeople(string name,Language language)
 2         {
 3             switch (language)
 4                 {
 5                     case Language.Englist:
 6                         EnglishGreeting(name);
 7                          break;
 8                     case Language.chinese:
 9                          ChineseGreeting(name);
10                          break;
11                         default:
12                          Console.WriteLine("无法识别你的语言");
13                          break;
14                 }
15         }
16 
17         // 可扩展性依然差 !!!!!   
18 
19     }
20     public enum Language
21     {
22         Englist, chinese
23     }
24 }
View Code

应用程序代码 

 1  Console.WriteLine("************ 没有用 委托前 ************");
 2             NotDelegate notDelegate = new NotDelegate();
 3             notDelegate.EnglishGreeting("Jimmy Zhang");//来个说英文的
 4             //如果来个说中文的呢???
 5             notDelegate.ChineseGreeting("张子阳");
 6 
 7             Console.WriteLine("------------------------------------------");
 8 
 9             //如果调用 GreetPeople();呢
10             notDelegate.GreetPeople("Jimmy Zhang");
11             notDelegate.GreetPeople("张子阳");//结果 还是说的 英文,我们只能这样写 GreetPeople扩展方法了
12             notDelegate.GreetPepleChinese("张子阳");//这会张子阳说中文了
13 
14             Console.WriteLine("---------------------------------------");
15 
16             //如果我们调用GreetPeople的重载函数呢 ?
17 
18             notDelegate.GreetPeople("张子阳", Language.chinese);
View Code
 这会好了,张子阳可以对人说人话对鬼说鬼话了(不过张子阳要会鬼话^_^) 看,张子阳对老外就可以控制自己说英文

1  notDelegate.GreetPeople("Jimmy Zhang", Language.Englist);
View Code

  这个方法如果能这样用多爽啊 notDelegate.GreetPeople("Jimmy Zhang",Englist);

 《这里怎么设计带后解决,不知道能不能搞定,临时想的?????????》这个方法如果能这样用不是爽上加爽吗? 

notDelegate.GreetPeople("Jimmy Zhang",EnglishGreeting);<这里伟大的张子阳帮俺们解决了>
1           Console.WriteLine("------------------------------------------------");
View Code
这个看起来,是挺伟大的袄! 不过你不觉得怪怪吗?

  

   UserDelegate  使用委托  定义的类 

1 namespace 张子阳委托
2 {
3     class UserDelegate
4     {
5         public delegate void GreetingLanguageDelegate(string name);
View Code

public enum Language { Englist, chinese }现在,让张子阳再次改动GreetPeople()方法,如下所示:

 1       public void GreetPeople(string name,GreetingLanguageDelegate MakeGreeting) 
 2         {
 3             MakeGreeting(name);
 4         }
 5 
 6 
 7         public void EnglishGreeting(string name)
 8         {
 9             Console.WriteLine("Morning  " + name);
10         }
11 
12         public void ChineseGreeting(string name)
13         {
14             Console.WriteLine("早上好  " + name);
15         }
16     }
17 }
View Code

  应用程序代码  

1  Console.WriteLine("************ 用 委托后 ************");
2 
3             UserDelegate userDelegate = new UserDelegate();
4 
5 
6             userDelegate.GreetPeople("张子阳", userDelegate.ChineseGreeting);
7             userDelegate.GreetPeople("Jimmy Zhang", userDelegate.EnglishGreeting);
View Code

现在好了,张子阳见人说人话见鬼说鬼话技术可以骗过低级捉鬼专家了,而且灵活多变,各种派的低级捉鬼专家都不怕

 1  Console.WriteLine("-------------张子阳继续修炼骗鬼专家----------");
 2             string name1, name2;
 3             name1 = "Jimmy Zhang";
 4             name2 = "张子阳";
 5             userDelegate.GreetPeople(name1,userDelegate.EnglishGreeting);
 6             userDelegate.GreetPeople(name2,userDelegate.ChineseGreeting);
 7 
 8             //再次修炼 , 现在出技术活了 , 不是捉鬼大师,是捉不到张子阳讲的鬼话了
 9 
10             Console.WriteLine("-------说鬼话更上一层楼-----------");
11 
12             UserDelegate.GreetingLanguageDelegate delegate1 = userDelegate.EnglishGreeting;
13             UserDelegate.GreetingLanguageDelegate delegate2 = userDelegate.ChineseGreeting;
14             userDelegate.GreetPeople(name1, delegate1);
15             userDelegate.GreetPeople(name2, delegate2);
View Code
 1  Console.WriteLine("-------说鬼话再上一层楼--------可以对同一个捉鬼专家混说了,尼玛---");
 2 
 3             UserDelegate.GreetingLanguageDelegate SuperDelegate;
 4             SuperDelegate = userDelegate.EnglishGreeting;
 5             SuperDelegate += userDelegate.ChineseGreeting;
 6             userDelegate.GreetPeople(name1, SuperDelegate);
 7             userDelegate.GreetPeople(name2, SuperDelegate);
 8 
 9             //说鬼话 专家了    能和捉鬼专家抗衡啦!
10 
11             SuperDelegate("Jimmy Zhang is super ghost!");
12             SuperDelegate("张子阳是超级说过话专家");
13 
14             UserDelegate.GreetingLanguageDelegate SupDelegate1 = new UserDelegate.GreetingLanguageDelegate(userDelegate.EnglishGreeting);
15             SupDelegate1 += userDelegate.ChineseGreeting;// 给此委托变量再绑定一个方法
16 
17             
18             //UserDelegate.GreetingLanguageDelegate SupDelegate2 = new UserDelegate.GreetingLanguageDelegate();可惜不能这样用啊!缺参数??
19             //SupDelegate2 += userDelegate.EnglishGreeting;
20             //SupDelegate2 += userDelegate.ChineseGreeting; ;
View Code 

      继续研究 !

  张子阳老师 的  委托和事件地址  http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html#2913822

原文地址:https://www.cnblogs.com/izhiniao/p/3662088.html