C#特性知识图谱-一、委托
一、 委托
1.1 委托定义
委托可以看成是一个方法的容器,将某一具体的方法装入后就可以把它当成方法一样调用。一个委托类型的变量可以引用任何一个满足其要求的方法。委托类似于C语言中的函数指针,但并不完全相同。
1.2 委托的使用
- 一般步骤
- 定义委托类型。
- 定义一个或多个符合委托类型要求的方法。
- 定义委托类型变量。
- 经第2步定义的方法引用挂接到第3步定义的变量,以型材一个方法调用列表。
- 通过委托变量间接调用方法调用列表。
- 匿名方法方式
- 定义一个委托/泛型委托


- 利用C#匿名方法特性直接给委托变量赋值



匿名方法其实就是将方法定义和委托变量赋值两个步骤合在一起。
- 委托类型可用作方法形参


1.3 委托揭秘
- 委托的继承树

- 委托的反编译IL

- 委托示例

1.4 委托的组合与分解
委托变量的运算符+=/-=,使用它可以动态的移除某个方法的引用。
引用多个方法的委托变量称为多路委托。

1.5 委托的应用
委托的本质特征就是一对多,一个委托变了对应多个方法。
示例:定时回调
Timer是.Net基类库中提供的定时器对象,它的构造函数接收一个TimerCallBack委托对象,此对象引用一个将被Timer对象定时回调的方法。





1.6 .Net基类库中的委托
.Net基类库中针对在实际开发中最常用的情形提供了几个预定义好的委托,方便软件工程师直接使用。
1.6.1 Action<>
Action<>委托是返回值类型为void的方法。

应用示例:

1.6.2 Func<>
Func<>委托的最后一个参数是委托所接收方法的返回值,前面的参数(如果存在)就是委托所接收方法的形参。

应用示例:

强调:.Net平台上的许多技术都用到委托,掌握委托是.Net程序员的基本要求。
提示:本学习笔记所有内容是基于金旭亮老师的《面向对象软件开发实践》相关课程进行总结形成,如想学习相关课程请点击响应的链接进入。
C#特性知识图谱-一、委托的更多相关文章
- C#特性知识图谱-二、事件
C#特性知识图谱-二.事件 二.事件 在事件驱动的软件系统中,符合某种预设条件的情形出现是,一个事件就会被触发. 2.1 事件三要素 事件源:激发事件的对象 事件信息:事件本身说携带的信息 事件响应者 ...
- 哈工大知识图谱(Knowledge Graph)课程概述
一.什么是知识图谱 知识(Knowledge)可以理解为 精炼的数据,知识图谱(Knowledge Graph)即是对知识的图形化表示,本质上是一种大规模语义网络 (semantic network) ...
- CCKS 2018 | 最佳论文:南京大学提出DSKG,将多层RNN用于知识图谱补全
作者:Lingbing Guo.Qingheng Zhang.Weiyi Ge.Wei Hu.Yuzhong Qu 2018 年 8 月 14-17 日,主题为「知识计算与语言理解」的 2018 全国 ...
- Redis闲谈(1):构建知识图谱
场景:Redis面试 (图片来源于网络) 面试官: 我看到你的简历上说你熟练使用Redis,那么你讲一下Redis是干嘛用的? 小明: (心中窃喜,Redis不就是缓存吗?)Redis主要用作缓存,通 ...
- 知识图谱学习与实践(4)——通过例句介绍Sparql的使用
通过例句介绍Sparql的使用 1 简介 SPARQL的定义,是一个递归的定义,为SPARQL Protocal and RDF Query Language,是W3C制定的RDF知识图谱标准查询语言 ...
- 知识图谱基础之RDF,RDFS与OWL
https://blog.csdn.net/u011801161/article/details/78833958 https://blog.csdn.net/baidu_15113429/artic ...
- 百度大脑UNIT3.0详解之知识图谱与对话
如今,越来越多的企业想要在电商客服.法律顾问等领域做一套包含行业知识的智能对话系统,而行业或领域知识的积累.构建.抽取等工作对于企业来说是个不小的难题,百度大脑UNIT3.0推出「我的知识」版块专门为 ...
- 知识图谱基础之RDF,RDFS与OWL 2
https://zhuanlan.zhihu.com/p/32122644 看过之前两篇文章([1](为什么需要知识图谱?什么是知识图谱?——KG的前世今生), [2](语义网络,语义网,链接数据和知 ...
- 知识图谱之图数据库Neo4j
知识图谱中的知识是通过RDF结构来进行表示的,其基本单元是事实.每个事实是一个三元组(S, P, O),在实际系统中,按照存储方式的不同,知识图谱的存储可以分为基于表结构的存储和基于图结构的存储. 基 ...
随机推荐
- AN INTEGER FORMULA FOR FIBONACCI NUMBERS
https://blog.paulhankin.net/fibonacci/ This code, somewhat surprisingly, generates Fibonacci numbers ...
- 如何实现LRU缓存?
面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ...
- 一、自动化监控利器-Zabbix
目录 1. 监控的作用 1.1 为何需要监控系统 1.2 监控系统的实现 1.3 常用的监控软件 2. Zabbix简介 2.1 选择Zabbix的理由 2.2 Zabbix的功能特性 3. Zabb ...
- LCT 小记
全程 Link-Cut Tree,是解决动态树问题的有力科技 --题记 简单实现 LCT 的形态直观上是一堆 Splay 的合体,每个 Splay 以时间戳为关键字,各个 Splay 通过虚边相连,可 ...
- AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)
AntD上传组件 AntDesign VUE文档 第一种方式 beforeUpload(file) { let isLt = true if (filesSize) { isLt = file.siz ...
- 一文了解Promise使用与实现
前言 Promise 作为一个前端必备技能,不管是从项目应用还是面试,都应该对其有所了解与使用. 常常遇到的面试五连问: 说说你对 Promise 理解? Promise 的出现解决了什么问题? Pr ...
- clion结合vcpkg以及GTest的使用
目录 一.vcpkg简介.下载和使用 1. vcpkg是什么 2. vcpkg下载 3. 使用vcpkg下载第三方库 二.clion结合vcpkg 1. 方法一:使用环境变量 2. 方法二:添加cma ...
- https://www.cnblogs.com/spec-dog/p/11161744.html
转自:https://www.cnblogs.com/spec-dog/p/11161744.html 在软件项目研发管理过程中,是否经常出现这样的场景:开发人员不知道什么时候转测:项目经理拿个Exc ...
- 详解JDBC中的Class.forName(DriverName)
在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态 ...
- 线程调用BeginInvoke
线程异步调用 Thread objThread = new Thread(new ThreadStart(delegate { Dispatch ...