看了一本《深入了解C#》感觉很不错,对于委托的讲解,给大家摘录了下来!

1.什么是委托

我的拙见:委托就是将方法作为参数,进行传递的

书中的记载:将某种行为“包含”在一个对象中,这个对象可以像其他任何对象那样使用,在该对象中可以齿形对象的行为。可以选择将委托类型看做只定义一个方法的接口,将委托示例看做实现了那个接口的一个对象(感觉这些说发有点空洞)。

2.简单委托的构成

为了让委托做某事,必须满足4个条件

(1)声明委托类型(2)必须有一个方法包含要执行的的代码(3)必须创建一个委托实例(4)必须调用(invoke)委托实例

下面通过一个例子解释

  1.  using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace weituo
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             //(2)第二步:必须创建一个委托实例
  13.             ProcessDelegate process;
  14.             Console.WriteLine("请输入用逗号分隔的两个数字:");
  15.             string input = Console.ReadLine();
  16.             int commaPos = input.IndexOf(',');
  17.             double param1 = Convert.ToDouble(input.Substring(0, commaPos));
  18.             double param2 = Convert.ToDouble(input.Substring(commaPos + 1,input.Length - commaPos -1));
  19.  
  20.             Console.WriteLine("输入M乘法D除法");
  21.             input =Console.ReadLine();
  22.  
  23.             // 初始化委托变量
  24.             if(input =="M")
  25. //(4)必须调用(invoke)委托实例
  26.                 process = new ProcessDelegate(Multiply);
  27.                 //注释:此处也可以写process = Multiply
  28.             else
  29. //(4)必须调用(invoke)委托实例
  30.                 process = new ProcessDelegate(Divide);
  31.  
  32.             // 使用委托调用函数
  33.             double result = process(param1,param2);
  34.             Console.WriteLine("结果:{0}",result);
  35.             Console.ReadKey();
  36.  
  37.         }
  38.  
  39.         //(1)第一步:声明委托类型
  40.         delegate double ProcessDelegate(double param1,double param2);
  41. //(2)第二步:必须有一个方法包含要执行的的代码(下面是两个方法)
  42.         static double Multiply(double param1, double param2)
  43.         {
  44.             return param1 * param2;
  45.         }
  46.  
  47.         static double Divide(double param1, double param2)
  48.         {
  49.             return param1 / param2;
  50.         }
  51.  
  52.     }
  53. }

  实例二:

下面一个例子,自己表一下步骤,如果能找清楚,就应该大致明白了

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace DemoConsole {
  8. //声明一个委托
  9. delegate string ConvertMethod(string inString);
  10. delegate void SayHello(string sayString);
  11. public class Program {
  12. static void Main(string[] args) {
  13. #region MyRegion
  14. //string[] names = { "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow", "Hedlund, Magnus", "Ito, Shu" };
  15. //Random random = new Random(DateTime.Now.Millisecond);
  16. //string name = names.ElementAt(random.Next(0, names.Length));
  17. ////Console.WriteLine(name);
  18. ////Console.ReadKey();
  19. //Dictionary<int, string> dic = new Dictionary<int, string>();
  20. //dic.Add(1, "AAA");
  21. //dic.Add(2, "BBBB");
  22. //dic.Add(3, "CCCC");
  23. //bool t = dic.All(x => x.Key > 0);
  24. //bool df = dic.Any(x => x.Key > 0);
  25. //dic.Any();
  26. #endregion
  27. ConvertMethod convertMeth;
  28. string name = "Dakota";
  29. convertMeth = UppercaseString;
  30. Console.WriteLine(convertMeth(name));
  31. Person p1 = new Person();
  32. Person p2 = new Person();
  33. SayHello sp1, sp2;
  34. sp1 = p1.Say;
  35. sp2 = p2.Say;
  36. sp1("AAAA");
  37. sp2.Invoke("BBBBBB");
  38. Console.ReadKey();
  39.  
  40. }
  41. private static string UppercaseString(string inputString) {
  42. return inputString.ToUpper();
  43. }
  44.  
  45. }
  46. public class Person {
  47. public string Name { get; set; }
  48. public int Age { get; set; }
  49. public string Address { get; set; }
  50. public void Say(string say) {
  51. Console.WriteLine(this.Name+"__"+say);
  52. }
  53. }
  54. }

  

C# 委托的”四步走“的更多相关文章

  1. JAVA EE企业级开发四步走完全攻略 [转]

    http://bbs.51cto.com/thread-550558-1.html 本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划, ...

  2. 关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。

    前言: oop非常非常非常重要.搞不懂oop,就玩不了python,就算能写也一定是写代码时候喜欢靠猜瞎猫碰死老鼠写得心很虚.为什么这么说呢,我也是从面向过程编程到死走过来的,一路def到死,一看到有 ...

  3. 【JAVA EE企业级开发四步走完全攻略】

    本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划,单个发blog比较零散,所以整理此索引,决定以后每发一季JAVA EE blog后会 ...

  4. CentOS下nagios报警飞信部署四步走

    CentOS下nagios报警飞信部署四步走   今天 帮群里一兄弟配了下nagios上的飞信,这个东西 我个人感觉还是很实用的,不过好久没配了,今天配置了一遍,顺便 就把过程记录下来了,供大家学习! ...

  5. C#WPF数据绑定模板化操作四步走

    前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...

  6. 组件 layui 表单抓取数据四步走

    注意事项: layui 中提交按钮是基于"监听"机制实现的. form.on() 的调用需置于 layui.use 的回调函数中. 末尾的 'return false' 不可或缺, ...

  7. Tomcat学习四步走:内核、集群、参数及性能

    主题简介: 内核实现原理 分布式集群 生产部署关键参数 性能监控和分析 一.内核实现原理 HTTP Web服务器与浏览器之间以HTTP协议通信,浏览器要访问服务器即向服务器发送HTTP请求报文. 如图 ...

  8. QGIS 3.14插件开发——Win10系统PyCharm开发环境搭建四步走

    前言:最近实习要求做一个QGIS插件,网上关于QGIS 3.14插件开发环境搭建的文档不多,而且也不算太全面.正好实习的时候写了一个文档,在这里给大家分享一下. 因为是Word转的Markdown,可 ...

  9. 【巨杉数据库SequoiaDB】巨杉Tech | 四步走,快速诊断数据库集群状态

    1.背景 SequoiaDB 巨杉数据库是一款金融级分布式数据库,包括了分布式 NewSQL.分布式文件系统与对象存储.与高性能 NoSQL 三种存储模式,分别对应分布式在线交易.非结构化数据和内容管 ...

随机推荐

  1. jacob 给word加印的功能

    花了两天时间,参考了一些资料,总算是处理好了这样一个技术点. 关键的心得如下: 使用jacob,重点不是jacob本身,而是office的一些API资料.比如需要知道光标的移动, 包括上下左右的mov ...

  2. js正则学习及一些正则集合

    正则中文版详细说明请看中文版w3cschool-----http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp微软正则表达式语言-快速参考:http ...

  3. 搭建eclipse环境下 Nutch+Mysql 二次开发环境

    最近看了下Nutch,目前Nutch最新版本2.3.1,支持Hbase.MongoDB等存储,但在搭建和测试过程中发现对Mysql 的支持好像有点问题. 后来将Nutch版本改为2.2.1.基于Nut ...

  4. 分享:Perl打开与读取文件的方法

    在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作. Perl打开与读取文件的方法,供大家学习参考.本文转自: ...

  5. WebApp

    目前的手机APP有三类:原生APP,WebAPP,HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Hybrid App的兴起是现阶段移动互联网产业的一种偶然.移动互联 ...

  6. 每日一“酷”之array

    array--国定类型数据序列 array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型. 1.初始化 array实例化时可以提高一个参数来描述允许哪个种数据 ...

  7. eclipse增加浏览器chrome

    1.安装完了google chrome游览器后,如何让eclipse直接用chrome打开jsp 2.添加到eclipse环境中即可, Window(菜单) -- preferences 增加成功后, ...

  8. 提高SQL语句的性能

    一.FROM子句中的表 FROM子表的安排或次序对性能有很大的影响,把较小的表放在前面,把较大的表放在后面,可以得到更高的效率. 二.WHERE子句中的次序 一般来自基表的字段放在结合操作的右侧,要被 ...

  9. ios开发之数据的持久化存储机制

    IOS中数据的持久化保存这块内容,类似于Android中文件的几种常见的存储方式. 对于数据的持久化存储,ios中一般提供了4种不同的机制. 1.属性列表 2.对象归档 3.数据库存储(SQLite3 ...

  10. Android开发笔记一(hello world)

    UI: <Button android:layout_width="wrap_content" android:layout_height="wrap_conten ...