委托是.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. 羽夏 Bash 简明教程(上)

    写在前面   该文章根据 the unix workbench 中的 Bash Programming 进行汉化处理并作出自己的整理,并参考 Bash 脚本教程 和 BashPitfalls 相关内容 ...

  2. Centos 7以上安装Docker (亲测有效)

    一.安装前的准备 我的环境是VMware15虚拟机安装的Centos7,Linux内核是3.10.0-1062.4.1.e17.x86_64 1. 用root账户登录查看操作系统内核版本及相关信息 [ ...

  3. 斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  4. 每天一个 HTTP 状态码 205

    205 Reset Content 205 Reset Content 表示服务器成功地处理了客户端的请求,要求客户端重置它发送请求时的文档视图.这个响应码跟 204 No Content 类似,也不 ...

  5. 探究MySQL中SQL查询的成本

    成本 什么是成本,即SQL进行查询的花费的时间成本,包含IO成本和CPU成本. IO成本:即将数据页从硬盘中读取到内存中的读取时间成本.通常1页就是1.0的成本. CPU成本:即是读取和检测是否满足条 ...

  6. ML第2周学习小结

    本周收获 总结一下本周学习内容: 1.复习了Numpy的一些基础操作,主要是利用numpy来对ndarray数组进行操作 我的博客链接: Numpy的一些操作 2.正在学习<深入浅出Pandas ...

  7. MATLAB调用NASTRAN的连续计算解决方案

    使用MATLAB调用NASTRAN提交bdf文件计算的方法笔者试过几种,分别做一下介绍 MATLAB直接调用操作系统命令 该方法对单次计算可能方便些,定义一个字符串,并使用eval命令调用,具体格式为 ...

  8. SQL中如何修改数据库名、表名、列名?

    文章目录 1.SQL中如何修改数据库的名字? 2.SQL中如何修改表的名字? 3.SQL中如何修改列的名字? 4.SQL中如何修改列的数据类型?(未完成,待续) 1.SQL中如何修改数据库名? 语法 ...

  9. VBA驱动SAP GUI实现办公自动化(一)

    小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动 ...

  10. C# 将HTML转为XML

    本文以C#及VB.NET后端程序代码示例展示如何将HTML转为XML文件.转换时,调用Word API -Free Spire.Doc for .NET 提供的文档加载方法及文档保存的方法来实现.转换 ...