zoukankan      html  css  js  c++  java
  • 读张子阳老师的委托和事件 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

  • 相关阅读:
    memcached全面剖析--3.memcached的删除机制和发展方向
    memcached完全剖析--1. memcached的基础
    memcached全面剖析--2.理解memcached的内存存储
    memcached内存管理机制[未整理]
    memcached缓存基本概念
    有关memcached企业面试案例讲解
    网关协议学习:CGI、FastCGI、WSGI
    Redis和Memcached的区别
    Linux 日志切割工具cronolog详解
    vim粘贴代码格式变乱
  • 原文地址:https://www.cnblogs.com/izhiniao/p/3662088.html
Copyright © 2011-2022 走看看