C#_基础:委托速讲
1定义:委托=函数指针
C# public delegate void Test(string str);
等价C++ public void (*Test)(string str);
委托赋值(初始化)和使用:
一个实体函数 :public void show(string str){//略}
Test t=new Test(show)或直接Test t=show
这样t就指向Test地址,执行t(“111”)就等于执行show(“111”)
委托的实现就在于将一个函数地址(名)给了委托变量。
2多播委托:
public void show1(string str){//略}
public void show2(string str){//略}
public void show3(string str){//略}
Test t=show1;t=show2;t=show3,执行t(“111”),则执行最后一次show3(“111”)
Test t=show1;t+=show2;t+=show3,执行t(“111”),则顺次执行一遍show1~3(“111”)
多播即将函数地址加载到委托列表里。(同理-=删除列表里存储的地址),执行委托的时候,就会顺次执行这些函数。
对于有返回值的多播委托,取最后一次返回值。
3委托数组:
Test[] t={show1,show2,show3};
定义了一个委托,可以把它当作数组来指向函数
4用自带的泛型委托来声明委托
Func<T>和Action<T>二者都可以接受最大参数个数为16个,二者的区别在于一个有返回值,另外一个返回值为void
比较一下,其实泛型委托和自定义的委托在使用上没什么不同。
只不过泛型委托Func<T> Action <T>系统已经为我们定义好了,直接使用就可以了。
为什么会有两个泛型委托,应该是为了解决泛型列表协变和抗变的问题,脑补吧
例子
泛型委托定义为 public deletegate TResult Func<in T,out TResult>(T arg)
Func<int , int> test <>里最后一个int是返回类型(必须有),前面的是形参类型表(可以没有)
泛型委托定义public deletegate Action<in T>(T arg)
Action<int> test <>里都是形参类型表(可以没有)
还有一个断言委托Predicate<T>,返回一个bool型,可自行研究。
5匿名方法
RT,即没有方法名称的方法
Test t=deletegate(string str ){//方法体};
可这样以将委托和委托实现合二为一,
还可以进一步压缩为lambda表示式:Test t=str=>{//方法体}
C#_基础:委托速讲的更多相关文章
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- kubebuilder实战之三:基础知识速览
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- SSM整合_年轻人的第一个增删改查_基础环境搭建
写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...
- C#基础委托回顾
C#基础委托回顾 前言 快忘记了. 委托的特点 委托类似于 C++ 函数指针,但它们是类型安全的. 委托允许将方法作为参数进行传递. 委托可用于定义回调方法. 委托可以链接在一起:例如,可以对一个事件 ...
- Linux基础知识第九讲,linux中的解压缩,以及软件安装命令
目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- 1.1python基础_基础
1_编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: UTF-8 -*- ...
- C++_基础_C与C++的区别
内容: (1)C++简介和编程的基本变化 (2)命名空间的概念和使用 (3)结构体.联合.枚举的不同 (4)布尔类型 以及 运算符别名 (5)函数的重载.缺省参数.哑元以 及内联 1.简介和编程的基本 ...
- C++_基础_C与C++的区别2
内容: (1)C++中的函数 (2)动态内存 (3)引用 (4)类型转换 (5)C++社区对C程序员的建议 1.C++中的函数1.1 函数的重载(1)重载的概念 在同一个作用域中,函数名相同,函数的参 ...
随机推荐
- Lintcode 175. 翻转二叉树
-------------------- 递归那么好为什么不用递归啊...我才不会被你骗...(其实是因为用惯了递归啰嗦的循环反倒不会写了...o(╯□╰)o) AC代码: /** * Definit ...
- HTML学习笔记--HTML的语法【1】
1.什么是HTML标记语言? HTML是表示网页信息的符号标记语言. 2.HTML的标记和他的属性 HTML文档的保存格式:.html..htm..xhtml 标记和被标记的内容构建出HTML文档.格 ...
- MongoDB高可用集群配置的方案
>>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...
- Delphi容器类之---Tlist,TStringlist,THashedStringlist的效率比较
转载自:http://www.ylzx8.cn/windows/delphi/73200.html 本人在做一个测试,服务器是IOCP的,我假定最大链接数是50000个. 测试背景:如果每个链接之间的 ...
- 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- 在Linux和Windows的Docker容器中运行ASP.NET Core
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...
- 优化一个奇葩表设计上的全表扫描SQL
之前在一个比较繁忙的系统抓到的耗时长.消耗CPU多的一条SQL,如下:SELECT * FROM Z_VISU_DATA_ALARM_LOG TWHERE TO_DATE(T.T_TIMESTR, ' ...
- Dev Cpp 输出中文字符问题
最近 c++ 上机作业,vc++6.0 挂了没法用,只好用 Dev Cpp 先顶替一下,然而在遇到输出中文字符的时候出现了乱码的情况,但这种情况又非常诡异.于是简单了解了一下写成此博客. [写在前面] ...
- 进击的Python【第四章】:Python的高级应用(一)
Python的高级应用(一) 本章内容: 内置函数 生成器 迭代器 装饰器 JSON和PICKLE的简单用法 软件目录结构规范 一.内置函数 1.数学运算类 abs(x) 求绝对值1.参数可以是整型, ...
- java 随机生成身份证代码
import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.I ...