博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】C#笔记之委托(Delegate)(一)
阅读量:5265 次
发布时间:2019-06-14

本文共 3289 字,大约阅读时间需要 10 分钟。

原文:  

本来因为之前接口那篇文章很多坛友给提了一些意见,花了一上午事件码了篇接口和抽象类比较和理解,谁知道。。。谁知道。。。不就打错了验证码么,木有了全都木有了?!恢复的只有一个标题好伤心~要再来一遍,今天是真没那个心情了,收拾收拾我这受伤的心灵,换个,抽象类就等下一回吧!好了,开始!

首先我们先理解下委托到底有什么用。我的理解呢就是,我找个人帮我干活,嘿嘿~不理解?等我给你个情景,一个是我家里没请保姆,一个是我请了个保姆。

[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();

这样行了吧?明白没?!

转载于:https://www.cnblogs.com/sbCat/p/4645778.html

你可能感兴趣的文章
.net Core 图片验证码 基于SkiaSharp实现
查看>>
fish redux 个人理解
查看>>
java 笔记一些
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
octave基本操作
查看>>
排球计分程序重构(一)
查看>>
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
基于CMMI的敏捷开发过程文档裁剪
查看>>
0925 韩顺平java视频
查看>>
软件需求规格说明书
查看>>
53. Maximum Subarray
查看>>
iOS-程序启动原理和UIApplication
查看>>
SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器...
查看>>
git的安装
查看>>
mysql 8.0 zip包安装
查看>>