委托

  委托是一种数据类型,可以声明委托类型变量。

  委托是一种可以指向方法的数据类型。

  声明委托的方式:delegate返回值类型 委托类型名(参数)    比如  delegate void MyDel(int n)

  注意这里的除了前面的delegate,剩下部分和声明一个函数一样,但是Mydel不是函数名,而是委托类型名

  如何创建委托类型的对象:

    MyDel sp = new Mydel (SayHello) //SayHello需要和MyDel的参数返回值一样;

      sp这个委托变量就指向SayHello这个方法。

      注意不要写成new Mydel (SayHello())因为加上()就是调用方法了

  简化的方法:MyDel sp = SayHello;//编译器会给搞成new Mydel (SayHello),反编译看看。

    注意不要写成MyDel sp = SayHello();

  委托的使用:委托变量之间可以互相赋值,就是一个传递指向方法的过程;sp()就是调用指向的方法,如果有参数就传递参数。

  委托:是一种指向方法的数据类型。 声明的语法:delegate int MyDel2(int i,string s); MyDel2是一个数据类型;

可以声明一个变量指向和他类型相容的方法

public delegate void MyDel(int n);

static void M1(int a) { Console.WriteLine("M1"+a); }

MyDel d1 = new MyDel(M1);//声明MyDel类型的变量,指向一个指向M1方法的对象 //上面的代码也可以简化成MyDel d1 = M1;

    不要把: MyDel d1 = new MyDel(M1); MyDel d1 = M1;

    声明成: MyDel d1 = new MyDel(M1()); MyDel d1 = M1();

    因为加上括号就代表调用方法了! 拿到一个委托变量的时候MyDel d1 = M1;

     加上括号就代表“执行指向的方法”,参数该怎么传递怎么传递 委托是引用类型,

    可以为null,如果委托变量是null,那么如果调用的话,就会抛出NullReferenceException;

Func、Action

  .Net中内置两个泛型委托Func、Action(在“对象浏览器”的mscorlib的System下),

  日常开发中基本不用自定义委托类型了。

   Func是有返回值的委托;

  Action是没有返回值的委托

  试验一下用Func、 Action代替之前的委托

匿名方法

  使用Delegate的时候很多时候没必要使用一个普通的方法,因为这个方法只有这个Delegate会用,并且只用一次,这时候使用匿名方法最合适。

  匿名方法就是没有名字的方法。 MyDelegate p = delegate(int s){s=10;};

   用匿名方法改造MyMax的例子。

lambda表达式

  函数式编程,在Entity framework编程中用的很多

  1、Action<int> a1 = delegate(int i) { Console.WriteLine(i); }; 可以简化成(=>读作goes to):

  2、Action<int> a2 = (int i) => { Console.WriteLine(i); }; 还可以省略参数类型(编译器会自动根据委托类型推断):

  3、Action<int> a3 = (i) => { Console.WriteLine(i); }; 如果只有一个参数还可以省略参数的小括号(多个参数不行) Action<int> a4 = i => { Console.WriteLine(i); };

  4、如果委托有返回值,并且方法体只有一行代码,这一行代码还是返回值,那么就可以连方法的大括号和return都省略:

    Func<int, int, string> f1 = delegate(int i, int j) { return "结果是" + (i + j); }; Func<int,int,string> f2= (i,j)=>"结果是"+(i+j);

  5、普通匿名类型也是一样用lambda表达式

委托深入

  集合常用扩展方法:

    Where(支持委托)、Select(支持委托)、Max、Min、OrderBy

     First(获取第一个,如果一个都没有则异常)

     FirstOrDefault(获取第一个,如果一个都没有则返回默认值)

     Single (获取唯一一个,如果没有或者有多个则异常)

    SingleOrDefault (获取唯一一个,如果没有则返回默认值,如果有多个则异常)

     关于orderby、关于where的深入分析 ToList、ToArray

委托的组合

  委托对象可以“+相加”,调用组合后的新委托对象会依次调用被组合起来的委托:MyDel m5 = m1+m2+m3;

  组合的委托必须是同一个委托类型

  (*)委托的“-”则是从组合委托中把委托移除;

   (*)委托如果有返回值,则有一些特殊。

  委托的组合一般是给事件用的,用普通的委托的时候很少用

事件

  案例:定一个Person类,定一个监听年龄变化的事件,当本命年的时候祝贺一下。

  触发事件的地方要判断一下是不是事件null

  事件语法:event Mydelegate mdl;

  加了event关键字实现事件机制的好处:

    用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。只能+=、-=!

委托与事件总结

  委托的作用:

    占位,在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定)。在实际调用之前,需要为委托赋值,否则为null。

  事件的作用:

     事件的作用与委托变量一样,只是功能上比委托变量有更多的限制。

    (比如:1.只能通过+=或-=来绑定方法(事件处理程序)2.只能在类内部调用(触发)事件。)

  (面试题)事件和委托的关系:事件由一个私有的委托变量和add_***和remove_***方法组成;

     事件的非简化写法:声明一个私有的委托变量和add、remove方法。

委托和事件的区别和关系

  错误的说法“事件是一种特殊的委托”

   委托用的比较多,事件只有开发WinForm、WPF的时候用的才比较多,而WinForm、WPF则不是学习重点。掌握“事件和语法”、“委托和事件的关系和区别(面试题)”即可。

  事件监听的代码的快速生成;WinForm中的事件简单分析(谁调用的Onclick方法)

   事件、索引器、属性本质上都是方法。(面试题)接口中可以定义什么?接口中只可以定义方法。接口中也可以定义“事件、索引器、属性”,因为他们本质上也都是方法。

转载于:https://www.cnblogs.com/wjs5943283/p/9401046.html

如鹏网 net高级技术 第二章 委托和事件(复习)相关推荐

  1. 企业网络高级技术第二章STP实验

    STP  spanning tree protocol  生成树协议 STP产生的原因:在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另一条链路仍然可以传输数据.但是,在交换 ...

  2. 计算机网络第二章选择题,计算机网络技术第二章习题

    计算机网络技术第二章习题 一.填空题 1.信道是_________________________,信道容量是指_________________,信道带宽是指­­­­­­­_____________ ...

  3. 计算机科学与技术第二章ppt,计算机科学与技术-编译原理-第二章重点.ppt

    计算机科学与技术-编译原理-第二章重点.ppt * 自下而上分析法举例 例2解: a b b c d e (1) a b b c d e A A (2) a b b c d e A A (3) a b ...

  4. JavaScript 高级程序设计第二章

    第二章 教材: JavaScript 高级程序设计 目录 第二章 一. script元素 1. 介绍 2. 标签位置 2.1. 推迟执行脚本---defer属性 2.2. 异步执行脚本---async ...

  5. 如鹏网.Net三层架构第一章三层基础

    三层架构: 1.通常意义上的三层架构就是将整个业务应用划分为:表现层.业务逻辑层.数据访问层.区分层次的目的即为了"高内聚低耦合"的思想. 2.该课程中通过讲解餐饮管理系统来让大家 ...

  6. 软件工程技术--第二章 可行性研究

    第二章 可行性研究及软件计划 1.软件定义--做什么? 软件生命周期的阶段划分: 软件计划:问题定义.可行性研究 软件开发:需求分析.软件设计(概要设计.详细设计).程序编写.软件测试 软件运行维护: ...

  7. 高中数学必修4知识点:第二章平面向量(复习必备)图文

    大家好,昨天分享高中数学必修4第一章知识点,今天继续分享高中数学必修4知识点第二章平面向量,平面向量是中数学必修4难点,有哪些知识点需要学习巩固,老师整理好高中数学必修4平面向量知识点,希望对大家有帮 ...

  8. 第二章《计算机系统》复习测试,职中计算机应用基础第二章测试题及答案

    傅连仲主编教材,第二章 Windows XP操作系统 的单元复习题. 13级<计算机应用基础>第二章测试题 满分100分,考试时间 90分钟 A.不确定 B.被强制关闭 C.被暂时挂起 D ...

  9. 计算机三级网络技术第二章基础知识总结

    第2章 中小型网络系统总体规划与设计 考点三题三分 ①路由器技术指标 ②网络系统分层设计(上下级之比,核心层设计) ③交换机技术指标(总带宽计算方法) ④网络服务器性能(系统高可能性) 基于网络的信息 ...

最新文章

  1. 【Live555】live555源码详解系列笔记
  2. thymeleaf 使用页面报错_异常处理-SpringBoot中thymeleaf对应前台页面大于号\小于号使用问题...
  3. Linux+Apache2.4+PHP5.6+MySQL5.6源码安装步骤
  4. php用script判断闰年,php判断/计算闰年的方法小结【三种方法】
  5. easyui datagrid 中怎么选中所有页面的数据_学会这5个Excel中常用技巧,可以准时下班去摆摊了...
  6. chown 和chgrp 软链接
  7. 阿里云部署SSL证书
  8. C++中动态定义一维数组,二维数组,三维数组的方法
  9. 不实例化图片,获取图片宽高的方法(vb.net)
  10. 英特尔推出新CPU架构!3D封装打破摩尔定律限制,10nm芯片明年上市
  11. jpetstore学习第4章
  12. 计算机二级java难吗_计算机二级上机-计算机二级难吗?二级高级语言:分笔试和上机考试笔试90分钟, 爱问知识人...
  13. 雷达人体存在感应器方案,智能物联网感知技术,实时感应人体存在
  14. Redis命令之hscan
  15. python vscode下载和安装教程(windows)
  16. 食堂刷卡消费系统服务器,食堂一卡通消费系统如何使用
  17. day12 函数高级
  18. phpcms system.php,phpcms_v9.6.0_UTF8 PHPcms系统开源 很有用 - 下载 - 搜珍网
  19. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播方案EasyNVR出现操作和画面显示不一致问题如何优化?
  20. 普通话测试软件字体怎么调整,新版普通话测试管理系统的几个常见问题

热门文章

  1. android 新闻功能列表,android根据提供的接口获取新闻列表
  2. typeahead有什么作用_typeahead使用配置参数。
  3. php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP
  4. 【POJ - 3744】Scout YYF I(概率dp,矩阵快速幂优化dp)
  5. 【牛客 - 283F】出装方案(最小费用最大流)
  6. c语言有语段不运行,各位C语言的高手,帮忙看下下面两段代码!他们不能运行!急!!!!!!...
  7. java http 上传文件_java利用httpClient实现后台文件上传请求
  8. Oracle中通过游标执行带参数的存储过程实现解析CLOB字段内的xml字符串:
  9. 一道很简单的贪心算法题~【贪心:我不要脸的伐?】
  10. 动态规划做多了以后,总结的相关知识