C#委托与事件的简单使用
前言:上一篇博文从原理和定义的角度介绍了C#的委托和事件。本文通过一个简单的小故事,来说明C#委托与事件的使用方法及其方便之处。
在阅读本文之前,需要你对委托和事件的基本概念有所了解。如果你是初次接触C#的委托与事件,请先阅读:C#委托与事件初探
好了,故事开始了~
一.小考拉从前的生活
从前有一只小考拉,她的生活中只有三样东西:水,米饭和肉。她渴了就去拿水喝,饿了就去拿米饭和肉吃。而且,米饭和肉一定要一起吃(换作你也不会单吃一种吧^_^),于是代码是这样的
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace KoalaOldLife 8 { 9 class Koala 10 { 11 public void Water() { Console.WriteLine("Find Water"); } 12 public void Rice() { Console.WriteLine("Find Rice"); } 13 public void Meat() { Console.WriteLine("Find Meat"); } 14 15 public void Need() 16 { 17 Water(); 18 Rice(); 19 Meat(); 20 } 21 } 22 23 class Program 24 { 25 static void Main(string[] args) 26 { 27 Koala koala = new Koala(); 28 koala.Need(); 29 Console.ReadKey(); 30 } 31 } 32 }
我们的关注点在Need函数(下同),因为Need函数表明了小考拉有需求的时候要怎样做。小考拉先拿了水喝,然后拿了米饭和肉吃。
二.小考拉现在的生活
终于有一天,小考拉觉得整天自己找东西吃太累了,于是她回到家,委托爸爸妈妈帮忙。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace KoalaLife 8 { 9 class Water 10 { 11 public void showWater() { Console.WriteLine("Here's the Water!"); } 12 } 13 14 class Rice 15 { 16 public void showRice() { Console.WriteLine("Here's the rice"); } 17 } 18 19 class Meat 20 { 21 public void showMeat() { Console.WriteLine("Here's the meat"); } 22 } 23 24 delegate void Dad(); //定义委托 25 delegate void Mom(); 26 27 class Koala 28 { 29 public event Dad thirsty; //定义事件 30 public event Mom hungry; 31 32 public void Need() 33 { 34 thirsty(); //调用事件 35 hungry(); 36 } 37 } 38 39 class Program 40 { 41 static void Main(string[] args) 42 { 43 Koala koala = new Koala(); 44 koala.thirsty += (new Water()).showWater; //绑定事件对应的方法 45 koala.hungry += (new Rice()).showRice; 46 koala.hungry += (new Meat()).showMeat; 47 48 koala.Need(); 49 Console.ReadKey(); 50 } 51 } 52 }
从Need函数可以看出,小考拉说渴的时候爸爸会过来,说饿的时候妈妈会过来。但是最开始他们并不知道要拿什么东西给小考拉。所以在Main函数中,小考拉要提前告诉爸爸:我说渴的时候给我拿水;提前告诉妈妈:我说饿的时候给我拿米饭和肉。
这样一来,小考拉就不用自己找东西了,只需要提前告诉爸爸妈妈一次渴和饿的时候需要什么,然后直接喊“我渴了”,“我饿了”,爸爸妈妈就会来送东西给小考拉吃。小考拉就能有更多时间懒懒的睡觉啦zZ~
三.总结
以上故事中,最开始只有对象(小考拉)和方法(水、米饭、肉)两层。后来在对象和方法这两层之间,加入了委托(爸爸妈妈),变为了三层,从而简化思路。很明显,这是因为,委托和事件帮助我们隐去了底层的一些细节,将细节封装起来,从而简化编程。
我想,这又是面向对象思想的一个体现吧。