zoukankan      html  css  js  c++  java
  • 对委托的一些短浅理解

    有这么一个功能,是根据不同的人来说不同的“早上好”。如果是按照以前的方法,我会这么做。

    如:

    #region 老办法 
                public static void SayHi(string name, PeopleType type)
                {
                    if (type == PeopleType.chinese)
                    {
                        Console.WriteLine("早上好,{0}", name);
                    }
                    else
                        if (type == PeopleType.american)
                    {
                        Console.WriteLine("Good Morning,{0}", name);
                    }
                }
                #endregion
    
    #region 参数
                public enum PeopleType
                {
                    chinese = 0,
                    american = 1
                } 
    #endregion

      思考:

      1、如果以后需要进行修改,还需要重新修改整个SayHi方法,有可能还会对其他地方有影响。

      2、如果需要再添加一个英国版的早上好,更得需要添加很多代码,且容易对其他地方有影响。

    *******************************经过改良的方法***********************

    1、先声明一个带参数的委托

     public delegate void SayhiHandler(string name);

    然后再新建一个类,其中有如下几个方法:

     public class Greeting
            {
                #region 新办法 
                public static void SayHi(string name, SayhiHandler sayHi)
                {
                    sayHi(name);
                }
                public static void SayHiChinese(string name)
                {
                    Console.WriteLine("早上好,{0}", name);
                }
                public static void SayHiAmerican(string name)
                {
                    Console.WriteLine("Good Morning,{0}", name);
                }                      
                #endregion
    
                #region 参数
                public enum PeopleType
                {
                    chinese = 0,
                    american = 1
                } 
                #endregion
            }

    经过委托,可按如下调用

                SayhiHandler sayHis = new SayhiHandler(Greeting.SayHiChinese);
                sayHis("张旭");
    
                SayhiHandler sayAmrican = new SayhiHandler(Greeting.SayHiAmerican);
                sayAmrican("Mr.Zxu");

    ************************************优点*********************************

    如果再解决以上的那个问题,只需要再添加一个如SayHiAmerican的方法即可。

  • 相关阅读:
    命令模式
    责任链模式
    代理模式
    享元模式
    195 Tenth Line
    test命令
    read命令
    echo命令
    java反射
    http状态码
  • 原文地址:https://www.cnblogs.com/axu92312/p/6056481.html
Copyright © 2011-2022 走看看