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 }
1
2
3 |
按照上面这样,如果有说法语、日语.. 我们是不是要继续啊 , 这样程序的性能,可扩展性? 可能我们会想到 来个枚举 ,重载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 }
应用程序代码
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);
1
2 |
//这会好了,张子阳可以对人说人话对鬼说鬼话了(不过张子阳要会鬼话^_^) //看,张子阳对老外就可以控制自己说英文 |
1 notDelegate.GreetPeople("Jimmy Zhang", Language.Englist);
//******** 这个方法如果能这样用多爽啊 notDelegate.GreetPeople("Jimmy Zhang",Englist);
1
2 |
// 《这里怎么设计带后解决,不知道能不能搞定,临时想的?????????》 //******** 这个方法如果能这样用不是爽上加爽吗? <br> // notDelegate.GreetPeople("Jimmy Zhang",EnglishGreeting);<这里伟大的张子阳帮俺们解决了> |
1 Console.WriteLine("------------------------------------------------");
1 |
//这个看起来,是挺伟大的袄! 不过你不觉得怪怪吗? |
UserDelegate 使用委托 定义的类
1 namespace 张子阳委托 2 { 3 class UserDelegate 4 { 5 public delegate void GreetingLanguageDelegate(string name);
1
2 |
//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 }
应用程序代码
1 Console.WriteLine("************ 用 委托后 ************"); 2 3 UserDelegate userDelegate = new UserDelegate(); 4 5 6 userDelegate.GreetPeople("张子阳", userDelegate.ChineseGreeting); 7 userDelegate.GreetPeople("Jimmy Zhang", userDelegate.EnglishGreeting);
//现在好了,张子阳见人说人话见鬼说鬼话技术可以骗过低级捉鬼专家了,而且灵活多变,各种派的低级捉鬼专家都不怕
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);
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; ;
继续研究 !
张子阳老师 的 委托和事件地址 http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html#2913822
原文:http://www.cnblogs.com/izhiniao/p/3662088.html