委托是.net语言中非常重要的一个概念,初学不太好理解也没有关系的,在一次一次的攻关后会领会到委托的精妙,可以说 .net 没有委托就没有后面更高级的事件,异步多线程等等特性的形成可能。所以一定要认真的对待.net语言中的这一重要概念。
  委托实例就是方法的指针,它指向一个或一组方法,调用一个委托的Invoke()方法就会把它指向的那个或那组方法都执行一遍
  初学时要注意对委托和委托实例的理解,委托是一种类型,它约束其将来所绑定的方法的返回值类型和参数个数+类型,想想我们在操作变量时对变量的声明的情况;委托实例则相当于是带有具体入参约束和出参约束的委托的变量,这个变量的本质是什么,其实就是一个或一组方法,它实例化了一个委托,这种实例化相当于我们实例化一个类时用new class1();这种方式所做的工作。
  可以先把泛型委托的概念放到一边,否则我们要啃的山头就更大了,并且泛型委托是.net后期才出现的,而委托这一概念在没有泛型的早期也就早已经使用的很普遍了。 
  1. 1 public class 计算器类
  2. 2 {
  3. 3 //声明一个具体的委托类型mydelegate,它规定绑定到它这种类型的变量的方法的返回值是一个decimal类型
  4. 4 //同时它也规定绑定到它这种类型的变量的方法的返回值是两个decimal类型
  5. 5 public delegate decimal mydelegate(decimal m, decimal n);
  6. 6 //接下来有两个方法符合上面的返回值和入参的规范:
  7. 7 static decimal Operation1(decimal x, decimal y)
  8. 8 { return x + y; }
  9. 9 static decimal Operation2(decimal x, decimal y)
  10. 10 { return x * y; }
  11. 11 public mydelegate 算法;
  12. 12 void XX()
  13. 13 {
  14. 14 //接下来是实例化一个委托,也就是把方法绑定到具体委托类型(mydelegate)的变量(算法)
  15. 15 算法 = new mydelegate(Operation1);
  16. 16 //使用+=操作符把多个方法绑定给一个委托类型(mydelegate)的变量
  17. 17 算法 += new mydelegate(Operation2);
  18. 18 }
  19. 19 public decimal ExecuteOperation(decimal a, decimal b)
  20. 20 {
  21. 21 return 算法.Invoke(a, b);
  22. 22 }
  23. 23 }
  24. 24 //2.委托对面向对象多态的体现:在下面 客户端运算类中 我们只需要传给计算器类的委托实例【算法】一个具体的算法(相减),
  25. 25 //则计算器类就能在不改动的情况下拥有新的算法能力
  26. 26 public class 客户端运算
  27. 27 {
  28. 28 计算器类 jsq1 = new 计算器类();
  29. 29 //在计算器类中并没有的新的算法:相减
  30. 30 public decimal 相减(decimal x, decimal y)
  31. 31 { return x - y; }
  32. 32 void 指示计算器做减法()
  33. 33 {
  34. 34 //把方法绑定给委托实例
  35. 35 jsq1.算法 += 相减;
  36. 36 Console.WriteLine(jsq1.算法.Invoke(5, 6));
  37. 37 }
  38. 38
  39. 39
  40. 40 //我们还可以这样做,调用外部封装好的算法方法,然后把这个方法成员绑定给委托实例,比如
  41. 41 void 指示计算器做除法()
  42. 42 {
  43. 43 //把单独类中的方法成员绑定给委托实例
  44. 44 jsq1.算法 += new 除法算法类().相除;
  45. 45 Console.WriteLine(jsq1.算法.Invoke(20, 5));
  46. 46 }
  47. 47 }
  48. 48 //把除法封装在一个单独的类中的方法成员:相除
  49. 49 public class 除法算法类
  50. 50 {
  51. 51 public decimal 相除(decimal x, decimal y)
  52. 52 { return x / y; }
  53. 53 }

如有理解错误的地方,欢迎大家拍砖指正。

C#委托的最简单入门和理解的更多相关文章

  1. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  2. delphi指针简单入门

    delphi指针简单入门:         看一个指针用法的例子:     1         var     2             X,   Y:   Integer;       //   ...

  3. 运维自动化之SALTSTACK简单入门

    运维自动化之SaltStack简单入门 饱食终日而无所事事,是颓也,废也.但看昨日,费九牛二虎之力除一BUG便流连于新番之中,不知东方之既黑,实乃颓颓然而荒废矣.故今日来缀一文以忏昨日之悔. Salt ...

  4. c#中,委托Func的简单实践

    c# 委托Func的简单实践最近才真正的接触委托,所以针对Func类型的委托,做一个实践练习. 首先说一些我对委托的初级理解:"就是把方法当做参数,传进委托方法里". 我平时用到的 ...

  5. Asp.Net MVC学习总结(一)——Asp.Net MVC简单入门

    一.MVC简单入门 1.1.MVC概念 视图(View) 代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML.XML和Applet. 模型(Model) 表示用户对其数 ...

  6. MyBatis学习总结(一)简单入门案例

    MyBatis学习总结(一)简单入门案例 主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用 一.需要的jar包: 1.核心包 2.依赖包 3.jdbc数 ...

  7. EChart.js 简单入门

    EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart   这个是Visual Studio里的自带控件,使用比 ...

  8. springboot 学习之路 1(简单入门)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  9. ECharts.js学习(一) 简单入门

    EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart   这个是Visual Studio里的自带控件,使用比 ...

随机推荐

  1. npm 是什么?

    npm 是什么? 本文写于 2020 年 6 月 16 日 最近帮几个同学装开发环境,发现他们会各种"卡死"在 npm 安装一些包的过程中. 他们会非常纠结这个命令我明明敲的和网上 ...

  2. 【Rust】使用HashMap解决官方文档中的闭包限制

    问题概述 值缓存是一种更加广泛的实用行为,我们可能希望在代码中的其他闭包中也使用他们.然而,目前 Cacher 的实现存在两个小问题,这使得在不同上下文中复用变得很困难. 第一个问题是 Cacher  ...

  3. Python技法:用argparse模块解析命令行选项

    1. 用argparse模块解析命令行选项 我们在上一篇博客<Linux:可执行程序的Shell传参格式规范>中介绍了Linux系统Shell命令行下可执行程序应该遵守的传参规范(包括了各 ...

  4. Nginx分片限流

    一.全局限流 在http节点中添加 # 创建限流规则 limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;# 客户端进行限流 # li ...

  5. 我的总结常用的js知识

    nvm nvm是node的包管理工具.在不同的项目下使用不同的node版本.下载地址 https://github.com/coreybutler/nvm-windows/releasesnvm in ...

  6. Android——RelativeLayout

    代码:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android= ...

  7. 多态——JavaSE基础

    多态 同一个方法可以根据对象的不同采取不同的动作 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多 基本条件: 有继承关系 子类重写父类方法 父类引用指向子类对象Father f1 = ne ...

  8. 4.怎么理解相互独立事件?真的是没有任何关系的事件吗? 《zobol的考研概率论教程》

    1.从条件概率的定义来看独立事件的定义 2.从古典概率的定义来看独立事件的定义 3.P(A|B)和P(A)的关系是什么? 4.由P(AB)=P(A)P(B)推出"独立" 5.从韦恩 ...

  9. 记一次beego通过go get命令后找不到bee.exe的坑

    学习goweb开发,gin是个轻量级的框架.如果想要一个类如aspnetmvc帮我们搭建好了的goweb框架,beego值得去学习.否则gin下面需要动手构建好多代码.新手还是先学现成的节约时间成本. ...

  10. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...