委托是.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 }

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

最新文章

  1. 使用 ExecuteMultiple 提高批量数据加载的性能
  2. 何必苦等VS2015?来看看VS2013下实现移动端的跨平台开发
  3. HTTP状态码及其含义
  4. HDOJ 2089 不要62
  5. C# 小规模查找集合性能测试
  6. maya user guider第一课,一些基本概念
  7. CSRF 攻击的应对之道--转
  8. Delphi打开窗体时报"Corrupt Portfolio Stream"
  9. MySQL索引与优化策略
  10. 多媒体应用-swift
  11. [DP] LCS小结
  12. leetcode 题解 || Swap Nodes in Pairs 问题
  13. [译]反-反汇编 & 混淆 #1: 苹果没有遵循自己制定的Mach-O规范?
  14. Python正则表达计算器
  15. JavaWeb核心技术学习 - 1.从JDBC说起
  16. Oracle 所有字典
  17. Vue(十六)vue-router路由
  18. scrollview嵌套tableview
  19. jsonrpc环境搭建和简单实例
  20. Loadrunner脚本优化-参数化之关联MySQL数据库获取数据

热门文章

  1. 记一次百万行WPF项目代码的重构记录
  2. 2022管家婆工贸版ERP T3 V22.0工厂管理软件单机网络版无限用户免狗软件可定制
  3. [codeforces] 暑期训练之打卡题(一)
  4. 【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed
  5. 缓存&PWA实践
  6. 广义SAM
  7. coding++: java 操作FastDFS(上传 | 下载 | 删除)
  8. React history.push()无法跳转 url改变页面不渲染
  9. python和numpy中sum()函数的异同
  10. JavaScript中的??和?.和??=操作符