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

    零.sublime的优势 容易上手 支持多点编辑 包管理:Package Control 速度快 深度可订制,配置文件放github上 sublime-config 快速文件切换 cmd + p 输入 ...

  2. 第06组Alpha冲刺(3/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2.鲍凌函 3.曾丽莉 4. 曹兰英 5. 方梓涵 6.董翔云 7.杜筱 8.黄少丹 9. 詹鑫冰 10.吴沅静 1.3 冲刺成果展示 1.1 ...

  3. Tomcat启动失败:java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager

    项目开发中发现服务器上Tomcat启动失败 开始定位 第一步:打开tomcat日志catalina.log: 2017-07-25 17:02:43,799 [Catalina-startStop-1 ...

  4. SpringCloud 服务治理

    目录 1. Eureka 1.1 Eureka 介绍 1.2 Eureka 快速入门 父工程 Eureka Server(子工程) pom.xml 启动类 application.yml Eureka ...

  5. 一张图进阶 RocketMQ - NameServer

    前言 「三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片链接,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦.」 一张图进阶 RocketMQ 图 ...

  6. BUUCTF-乌镇峰会种图

    乌镇峰会种图 16进制拖到底一看便知

  7. Node.js精进(4)——事件触发器

    Events 是 Node.js 中最重要的核心模块之一,很多模块都是依赖其创建的,例如上一节分析的流,文件.网络等模块. 比较知名的 Express.KOA 等框架在其内部也使用了 Events 模 ...

  8. sap 调用Http 服务

    REPORT ZMJ_GETAPI. DATA: LEN TYPE I, "发送报文长度 LEN_STRING TYPE STRING, URL TYPE STRING, "接口地 ...

  9. Docker 与 K8S学习笔记(二十四)—— 工作负载的使用

    我们前面讲了很多关于Pod的使用,但是在实际应用中,我们不会去直接创建Pod,我们一般通过Kubernetes提供的工作负载(Deployment.DeamonSet.StatefulSet.Job等 ...

  10. 一文搞懂jsBridge的运行机制

    我司的APP是一个典型的混合开发APP,内嵌的都是前端页面,前端页面要做到和原生的效果相似,就避免不了调用一些原生的方法,jsBridge就是js和原生通信的桥梁,本文不讲概念性的东西,而是通过分析一 ...