要理解委托,我们首先要知道委托的概念:

”委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。“

这是百度上和许多教科书上都有的一个概念,但是初学这门编程语言的话,或者基础比较差的童鞋,看到这句话,肯定是一脸懵比,先不用着急,我们来慢慢通过代码去理解委托这个概念

(1)首先新建一个控制台程序,对于初学者而言,控制台程序是学习基础知识的最好工具

//delegate void EvenHandler(object sender, EventArgs e);public delegate void MyDel();//自定义一个委托class Program{static void Main(string[] args){//(1)简单委托MyDel say1 = SayHi;MyDel say2 = new MyDel(SayHi);say1();say2();}static void SayHi(){Console.WriteLine("Hi World");}}

这是最简单的委托实例了,委托可以通过上面say1和say2两种方式进行调用,这里我们要知道委托也是一种类型,所以它和类是同级的,可以通过委托来掉用方法,不要误以为委托和方法同级的,方法只是类的成员,还有定义委托和与之对应的方法必须具有相同的方法签名,即参数个数,类型相同,返回值类型相同,上面代码实例没有什么实际意义,只是然我们知道委托的结构以及委托与方法的关系

(2)委托的扩展

//自定义一个委托public delegate int Expression(int a, int b);class Program{static void Main(string[] args){//(2)委托扩展//Expression ex = GetEX;//Calculate(ex, 25, 10);Calculate(GetAdd, 25, 10);}static int Add(int a, int b){return a + b;}static int Divide(int a, int b){return a / b;}static int subtract(int a, int b){return a - b;}static int multiply(int a, int b){return a * b;}static int GetAdd(int a, int b){return a + b;}static void Calculate(Expression ex, int a, int b){Console.WriteLine(ex(a, b) + "\n");}}

和之前比,稍微把代码复杂了那么一点点,上面我们真正实现了“把方法当作参数在另一个方法中传递或调用”,实现了一个简单的加法方法,当然我们也写了减法,乘法,除法的方法。你会想这样写有什么好处呢?我直接调用自己的加减乘除方法不就完了吗,何必要多此一举,通过委托来折腾一番呢?委托的意义何在呢?在这里请先听我先说一种思想:“上面的Calculate方法里面代码比较少,只有一个简单的输出语句,而且我们只想单纯的实现一个简单加减乘除效果,所以你会感觉有点多次一举,也可以说本来就是多次一举,但是你可以设想一下,假如我们这几个加减乘除方法,它的代码量非常庞大,但是这几个方法的代码相似度又非常高,但是每个方法里就只有一两个小小的语句块儿不一样,那不是会让你觉得很不爽,很想把它们整合,那怎么处理呢?你可能首先会想通过if,else if或者switch语句对不同部分的代码块做不同的处理,现在我只需要做加减乘除四个case,这个思路暂且可以接受,那将来我又要加余数运算,平方运算,指数对数运算等等,假设我几百个甚至更多个这样类似的方法呢,那我岂不是要写几百个if,else,这样做很明显程序的扩展性会很差。所以我们要换个思路,我们完全可以通过一个方法把相同的部分封装起来,而不同的部分通过参数传过去,但是方法并不能直接被当作参数被传递和调用,那怎么办呢?,那么这时候委托的作用就体现出来了,我们可以把委托作为参数传递给封装好了的方法,通过委托来动态的调用方法。”  结合我所说的思想,那么上面封装的部分就类似与我们的Calculate方法,而不同的部分就是每个加减乘除方法,你可以假设Calculate是一个非常庞大的已经封装好了的方法,而我们传进去的只是这个方法需要动态改变的部分,这样就是最上面概念所谓的“方法动态地赋给参数”,这样写到好处是大大提升了方法的灵活性与扩展性,也减少了代码的冗余,所以委托在实际项目中是一个十分有用的工具,它可以使你的代码更加的”舒适,健壮“。是不是感觉对委托的理解有那么一丢丢长进了,之后我还会继续写关于学习匿名方法,lambda表达式,泛型委托,以及事件的相关学习心得。以上言论是我自己参考资料,和项目实战后自己做出的总结,如果又什么不对的地方,希望各位大神指出^^。

委托学习总结(一)浅谈对C#委托理解相关推荐

  1. 转发:很好理解流形学习的文章-浅谈流形学习(Manifold Learning)

    转 很好理解流形学习的文章-浅谈流形学习(Manifold Learning) 来源 Machine Learning 虽然名字里带了 Learning 一个词,让人乍一看觉得和 Intelligen ...

  2. 微课与个性化学习路径之浅谈

    微课与个性化学习路径之浅谈 2016-03-09  宝山薛院  两个黄鹂一行白鹭 微课是相对于常规的课程而略有短小,比如实习课程.技能训练课程.暑期实践课程等. 这些微课程也需要有教学大纲.教学计划. ...

  3. 浅谈Spring IOC的理解

    浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...

  4. web前端技术基础课程讲解之浅谈对soket的理解

    浅谈对soket的理解 定义: 网络上的两个程序通过一个双向的通信链实现数据的交换,这个链接的一端就成为Socket 它是进程通信的一种,即调用这个网络库的api函数实现分布在不同主机相关进程之间的数 ...

  5. 关于计算机专业学习的四点浅谈

    一.广泛了解,从科普书籍开始 选择计算机专业的同学,也许是因为原先有一定的基础,也许是因为一时的激情,但更多的人,可能对自己的选择没有深刻的认识,或多或少对计算机专 业有一些神秘的感觉.自己究竟是否喜 ...

  6. 学习小感之浅谈学习兴趣之路

           前言:今天见徒弟,不由得回想起一年前的自己,再对比现在的自己,一年的成长之路感慨颇深!细细品味这一路,令自己最欣慰莫过于培养了自己对计算机的兴趣.        一.今昔对比       ...

  7. [转帖]ABAQUS学习和开发浅谈 [原创]

    原文地址:http://blog.163.com/paulzxy@126/blog/static/14366276020116861613243/ ABAQUS是非线性有限元分析(Nonlinear ...

  8. 符号主义对深度学习的意义浅谈

    符号主义人工智能经历过古典时期的专家系统阶段, 中期的知识图谱阶段, 和近期深度学习和符号主义的再次联姻. 那么一个很重要的问题是符号主义为什么会复兴,它对当下的机器学习又有何意义? 本文内容可以参考 ...

  9. 系统学习NLP(二十三)--浅谈Attention机制的理解

    转自:https://zhuanlan.zhihu.com/p/35571412 Attentin机制的发家史 Attention机制最早是应用于图像领域的,九几年就被提出来的思想.随着谷歌大佬的一波 ...

最新文章

  1. [python]逆水行舟不进则退(1)
  2. JavaWeb开发模式:C/S模式,B/S模式,JSP+JavaBean模式,JSP+Servlet+JavaBean模式
  3. 中国电动汽车充电桩行业十四五发展预测及未来战略规划建议报告2022-2027年版
  4. Mybatis中example的使用
  5. android 定时器 坑,Android 记录一个使用AlarmManager的坑。
  6. UCI数据集整理(附论文常用数据集)
  7. Android Widevine 基本概念
  8. 博饼程序-Java实验
  9. 合抱之木,生于毫末; 九层之台,起于垒土。
  10. 云孚开源情报系统YFINT
  11. linux、ubuntu如何查看网速
  12. 中大计算机保研复试,过来人分享:平凡的我如何成功保研中山大学?
  13. iOS 给APP评分无法连接到App Store解决方法
  14. JS中生成与解析JSON
  15. mysql分数占百分比查询
  16. MySQL如何退出命令行
  17. 鸿蒙系统拟物化图标,那些让人不得不吐槽的软件设计风格
  18. AC1082带标准程序的版本说明_2.硬件以及参数说明
  19. create sequence 序列号
  20. attention mechanism in computer vision(1)——channel attention

热门文章

  1. 心灵战争服务器维护,心灵战争服务器异常产生哪些问题如何解决_心灵战争服务器异常产生问题及解决方法_玩游戏网...
  2. ajax里拼接标签属性规则,vue 标签属性数据绑定和拼接的实现方法
  3. 去除a链接+java正则_JavaScript实现正则去除a标签并保留内容的方法【测试可用】...
  4. java中queue排序_Java中常见的排序算法有哪些?---选择排序
  5. python的flag是什么意思_python flag 什么意思
  6. matlab和python哪个运行快_matlab vs python: 跑循环的速度对比
  7. 激光IMU融合——LIO-Mapping / LIOM / LINS / LIO-SAM算法解析
  8. 【AI学院】新手如何学CV?老司机带学有三书籍《深度学习之图像识别》,赠书8本...
  9. 全球及中国焦炉气制天然气用催化剂行业前景动态与未来可行性研究报告2022版
  10. 中国太阳能热水器市场营销模式探析与品牌格局调研报告2022版