有这么一个功能,是根据不同的人来说不同的“早上好”。如果是按照以前的方法,我会这么做。
如:
#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的方法即可。
时间: 2024-10-12 18:39:59