“踢狗”引发的委托 和 事件
“踢狗”引发的委托 和 事件
话说您的客户看见了人人网上面的踢屁股游戏,想自己开发一套游戏,叫踢狗游戏,这老几真的超级抠门 才给了几百快钱,让设计一下,老板竟然接下来了,给了一个刚毕业的小小做这个程序。
小小经过一天的努力中把程序设计出来了:
| using System; namespace LS.KickedDog1 {
public class Dog { public void Kicked() ///业务逻辑 { /*…一些代码…*/ Console.WriteLine("小狗跑了"); ///显示层 /*…一些代码…*/ } }
public class Kick { public static void Main() { Dog dog=new Dog(); dog.Kicked(); } } |
小小很开心,把程序给公司项目经理王大拿看,王大拿看了一眼,说设计的不行啊,您要加强学习啊,小小很奇怪感觉没有什么问题!大拿提示了了聪明的小小:
你想想看啊如果客户哪天不想要这个控制台程序他想要一个winform的程序你怎么改啊?小小马上就说把Console.WriteLine("小狗跑了");换成MessageBox.Show(“…”),大拿又说如果客户又要改回来呢?小小立马就说把程序再复制一份他要哪个就调用哪个!大拿没说话,过了一会大拿说:
打个比喻 在winform 底下的 Button 点击事件
如果一个程序员想点击按钮 跳到一个网站
另一个程序员点击按钮弹出一句话,如果微软的设计天才们都自己写,
ButtonClick1(){}
ButtonClick2(){}............
那他们就是不是天才了,累死他们;
那微软的天才怎么设计的呢?就是让我们写Button的事件方法?我们自定义!!
聪明的小小想到了,如果这个程序有1000种不同的方式呢?难道复制1000份吗?这样会造成紧耦合的局面,于是小小想到了 如果可以传递一个方法 去Dog类里面 就算再多的需求,客户想要那种实现 我就做哪种实现传递给Dog就好啦。小小立马把想法告诉大拿,大拿笑着说不错,用什么可以传递方法呢?传递方法?小小突然想到了委托,脱口而出。
大拿说不错,回去设计吧。。。。
又过了一天小小高高兴兴的把设计的程序给大拿看:
| using System; using System.Windows.Forms; namespace LS.KickedDogDelegate1 { public delegate void DelegateKicked(); public class Dog { DelegateKicked delegateKicked;
public Dog(DelegateKicked delegateKicked) { this.delegateKicked=delegateKicked; }
public void Kicked() { this.delegateKicked(); } }
public class Test { public static void Main() { Dog dog=new Dog(new DelegateKicked(FormsKicked)); dog.Kicked(); }
public static void ConsoleKicked() { Console.WriteLine("小狗被踢了"); }
public static void FormsKicked() { MessageBox.Show("小狗被踢了"); }
}
} |
大拿看着程序,微笑着说:“不错”,小小暗自高兴,感觉自己很聪明,“但是还是有问题,虽然设计出了小狗被踢了这个动作,但是小狗可能咬他,或者小狗跑掉了,到底是什么在踢狗之前完全是不知道的”。小小没有灰心经过两天的设计,小小终于拿出最终版本:
| using System; using System.Windows.Forms; namespace LS.KickedDogDelegate2 { public delegate void KickedEventHandler(); public class Dog { private KickedEventHandler _kicked; public void AddKickedEventHandler(KickedEventHandler kicked) { _kicked+=kicked; } public void RemoveKickedEventHandler(KickedEventHandler kicked) { _kicked-=kicked; }
public void Kicked() { this._kicked.Invoke(); } }
public class Test { public static void Main() { Dog dog=new Dog(); dog.AddKickedEventHandler(new KickedEventHandler(ConsoleKicked)); bool _isBite=isBite(); if (_isBite) { dog.AddKickedEventHandler(new KickedEventHandler(ConsoleBite)); } dog.Kicked(); }
public static bool isBite() { /*一些代码*/ return true; }
public static void ConsoleKicked() { Console.WriteLine("小狗被踢了"); }
public static void ConsoleBite() { Console.WriteLine("小狗咬你"); }
public static void ConsoleRun() { Console.WriteLine("小狗跑了"); }
public static void WinFormKicked() { MessageBox.Show("小狗被踢了"); }
} } |
大拿看着小小的设计 突然说“Perfect” 小小等待着他的但是,但是这次出来的不是但是,
却是:你的设计实施微软天才们设计的思想;“MY GOD” 小小说。
大拿说:你把这段代码
| private KickedEventHandler _kicked; public void AddKickedEventHandler(KickedEventHandler kicked) { _kicked+=kicked; } public void RemoveKickedEventHandler(KickedEventHandler kicked) { _kicked-=kicked; }
|
可以改成 public event KickedEventHandler _kicked; 你再运行试试;
然后再改改其他的代码;小小说好的;过了两个小时小小拿出了向客户展示的版本:
| using System; using System.Windows.Forms; namespace LS.KickedDogDelegate3 { public delegate void KickedEventHandler(); public class Dog { /* private KickedEventHandler _kicked; public void AddKickedEventHandler(KickedEventHandler kicked) { _kicked+=kicked; } public void RemoveKickedEventHandler(KickedEventHandler kicked) { _kicked-=kicked; } */
public event KickedEventHandler _kicked;
public void Kicked() { this._kicked.Invoke(); } }
public class Test { public static void Main() { Dog dog=new Dog(); // dog.AddKickedEventHandler(new KickedEventHandler(ConsoleKicked)); dog._kicked+=new KickedEventHandler(ConsoleKicked); bool _isBite=isBite(); if (_isBite) { dog._kicked+=new KickedEventHandler(ConsoleBite); } dog.Kicked(); }
public static bool isBite() { /*一些代码*/ return true; }
public static void ConsoleKicked() { Console.WriteLine("小狗被踢了"); }
public static void ConsoleBite() { Console.WriteLine("小狗咬你"); }
public static void ConsoleRun() { Console.WriteLine("小狗跑了"); }
public static void WinFormKicked() { MessageBox.Show("小狗被踢了"); }
} } |
小小设计的程序受到了客户的好评,而且需求不断在变的同时,小小却没有加班,设计的合理,稳定,老板怕小小被别的公司挖走了,正考虑加工资呢。。。。。。。。。小小深感这是大拿帮助他的。。。
剧终。。

浙公网安备 33010602011771号