本来因为之前接口那篇文章很多坛友给提了一些意见,花了一上午事件码了篇接口和抽象类比较和理解,谁知道。。。谁知道。。。不就打错了验证码么,木有了全都木有了?!恢复的只有一个标题好伤心~要再来一遍,今天是真没那个心情了,收拾收拾我这受伤的心灵,换个话题,抽象类就等下一回吧!好了,开始!
首先我们先理解下委托到底有什么用。我的理解呢就是,我找个人帮我干活,嘿嘿~不理解?等我给你个情景,一个是我家里没请保姆,一个是我请了个保姆。
[code]csharpcode:
using System; using System.Collections.Generic; class XiaoJian // 写一个“小贱”类,嘿嘿,也就是我了,看下面有那么多活要做,现在我还没有请保姆 { public string WashTheDishes() // 洗碗T。T { return "洗碗洗碗。。。"; } public string CleanTheFloor() // 扫地T。T { return "扫地扫地。。。"; } public string WashTheClothes() // 洗衣服T。T { return "洗衣洗衣。。。"; } }
[code]csharpcode:
using System; using System.Collections.Generic; class DoHousework // 这个类就是做家务了 { static void Main(string[] args) { XiaoJian xiaoJian = new XiaoJian(); // 这个也就是我,可以看到下面所有的活都是我在干 Console.WriteLine(xiaoJian.WashTheDishes()); Console.WriteLine(xiaoJian.CleanTheFloor()); Console.WriteLine(xiaoJian.WashTheClothes()); Console.ReadKey(); } }
来看下结果
接下来,我给家里雇了一个保姆
[code]csharpcode:
using System; using System.Collections.Generic; public delegate string Nanny(); // 这个呢就是在人才市场登记下,告诉他我要雇保姆,可以看到下面我要做的活都没有变 class XiaoJian { public string WashTheDishes() { return "洗碗洗碗。。。"; } public string CleanTheFloor() { return "扫地扫地。。。"; } public string WashTheClothes() { return "洗衣洗衣。。。"; } }
[code]csharpcode:
using System; using System.Collections.Generic; class DoHousework { static void Main(string[] args) { XiaoJian xiaoJian = new XiaoJian(); Nanny nanny = new Nanny(xiaoJian.WashTheDishes); // 这里我们找来个保姆,立马就给她安排了洗碗的工作 Console.WriteLine(nanny()); nanny += xiaoJian.CleanTheFloor; // 这里是告诉她洗了碗之后把地扫了 Console.WriteLine(nanny()); nanny += xiaoJian.WashTheClothes; // 这里是告诉她扫地之后再去洗衣服 Console.WriteLine(nanny()); Console.ReadKey(); } }
来看下结果
眼尖的童鞋发现,既然有了保姆,我还待在家里干嘛呢,那我接下来我就不要new出来了***要把多余的XiaoJian xiaoJian = new XiaoJian();去掉***
[code]csharpcode:
using System; using System.Collections.Generic; public delegate string Nanny(); class XiaoJian // 有没有在这个类中发生了什么变化?对,所有的方法都变成了静态方法 { public static string WashTheDishes() { return "洗碗洗碗。。。"; } public static string CleanTheFloor() { return "扫地扫地。。。"; } public static string WashTheClothes() { return "洗衣洗衣。。。"; } }
[code]csharpcode:
using System; using System.Collections.Generic; class DoHousework // 回到做家务这个类中,我已经不用再new出来了! { static void Main(string[] args) { Nanny nanny = new Nanny(XiaoJian.WashTheDishes); Console.WriteLine(nanny()); nanny += XiaoJian.CleanTheFloor; Console.WriteLine(nanny()); nanny += XiaoJian.WashTheClothes; Console.WriteLine(nanny()); Console.ReadKey(); } }
看来这个案例,还不知道委托干嘛用?好吧,给你总结下:
1.委托就是原来要你自己做的是叫别人去干就行了,比如,xiaoJian.WashTheDishes()==>nanny += XiaoJian.WashTheDishes;你只要告诉她要做什么(比如,nanny += XiaoJian.CleanTheFloor;),安排好以后说,干活去吧(nanny())!
2.来看看委托怎么去用
(1)先在人才市场登记下,告诉他我要雇保姆,比如,public delegate string Nanny();
(2)然后需要的时候雇个保姆,比如,Nanny nanny = new Nanny(XiaoJian.WashTheDishes); 记得给她安排工作,如果闲着雇她干嘛
(3)如果还有别的事要她做呢就用+=告诉她,比如,nanny += XiaoJian.CleanTheFloor;同样的,有件事不用她做了就用-=,比如,nanny -= XiaoJian.CleanTheFloor;
(4)事情安排好了就告诉她,去干活吧!GO GO GO!比如,nanny();
这样行了吧?明白没?!