对于托管新手级认识,很形象
这是我在百度中看到的一段对话:
(http://zhidao.baidu.com/link?url=Z02kPIeEZHTZAIuki0WkFBhjpKOyWrASbotoAszIZVPOX26YB62DgKOLChn3XvKqTj469tiNcfCQq27H6uj8hq)委托主要是解耦调用者和执行者的,如果你没学过设计模式或者做大的项目,是理解不了的
追问
稍微具体点,如何解耦调用者和执行者?(弄懂了加50分)
我的想法是:只要知道那个对象有这个方法,直接通过这个对象调用方法就行了。
回答
给你讲个通俗的例子,你早上要吃包子作为早饭,那么你可能让你爸爸或者妈妈帮你做,那你就会调用 爸爸.要包子() 妈妈.要包子() 返回包子对象。
但是如果你爸妈不在家的时候,你只能去街上买,问题是你根本不知道街上这些人的名字,那你怎么调用呢?
所以你就要用到委托了,委托就是给你一个协定,比如delegate 包子 要包子(); 你只需要知道能调用要包子返回一个包子就可以了,根本不需要知道是谁,怎么给你做的包子,就好象你到大街上买是人家自己做的还是工厂做的还是昨天剩下的你都不清楚。包子店就提供了这样一个委托,你只需要到包子店调用 要包子()就可以拿到包子了
追问
核心应该是:到包子店调用 要包子(),会自动触发“卖包子”行为,而不是政府命令卖包子的人去卖包子。 这个理解对吧。
回答
对的,因为是你要买包子主动会调用委托,如果是政府命令卖包子那就是事件了
下面是我根据我的理解和上面的形象举例,编了一段代码,供新手参考。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace test1 7 { 8 class Class2 9 { 10 private static void Main(string[] args) 11 { 12 Person person=new Person() ; 13 person.buyEventHandler += MBZEventHandler; 14 person.Name = "***"; 15 person.buy(person); 16 Console.ReadKey(); 17 } 18 19 private static void MBZEventHandler(object sender, EventArgs e) 20 { 21 baozipu saler = new baozipu(); 22 saler.Name = "SF"; 23 saler.sale(saler); 24 } 25 } 26 27 class Person 28 { 29 public event EventHandler buyEventHandler; 30 public void buy(object sender) 31 { 32 Console.WriteLine((sender as Person).Name + ":我要买一个包子"); 33 if (buyEventHandler != null) 34 { 35 buyEventHandler(this , new EventArgs()); 36 } 37 } 38 public String Name{get;set;} 39 } 40 41 class baozipu 42 { 43 //public event EventHandler saleEventHandler; 44 public void sale(object sender) 45 { 46 Console.WriteLine((sender as baozipu).Name + ":卖给你一个包子"); 47 } 48 public String Name { get; set; } 49 } 50 }
浙公网安备 33010602011771号