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#_基础:委托速讲的更多相关文章

  1. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  2. kubebuilder实战之三:基础知识速览

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  4. C#基础委托回顾

    C#基础委托回顾 前言 快忘记了. 委托的特点 委托类似于 C++ 函数指针,但它们是类型安全的. 委托允许将方法作为参数进行传递. 委托可用于定义回调方法. 委托可以链接在一起:例如,可以对一个事件 ...

  5. Linux基础知识第九讲,linux中的解压缩,以及软件安装命令

    目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...

  6. web前端学习python之第一章_基础语法(一)

    web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  7. 1.1python基础_基础

    1_编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: UTF-8 -*- ...

  8. C++_基础_C与C++的区别

    内容: (1)C++简介和编程的基本变化 (2)命名空间的概念和使用 (3)结构体.联合.枚举的不同 (4)布尔类型 以及 运算符别名 (5)函数的重载.缺省参数.哑元以 及内联 1.简介和编程的基本 ...

  9. C++_基础_C与C++的区别2

    内容: (1)C++中的函数 (2)动态内存 (3)引用 (4)类型转换 (5)C++社区对C程序员的建议 1.C++中的函数1.1 函数的重载(1)重载的概念 在同一个作用域中,函数名相同,函数的参 ...

随机推荐

  1. Launch Mode

    1.standard standard的加载模式不管是否已经存在Activity都会再次创建一个Acitivy,同时将新创建的Activity加入栈顶. 所以在这种加载模式下需要多次返回才能退出. 2 ...

  2. not in 和 not EXISTS 的区别

    1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...

  3. (2)WebAPI的增删改查

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  4. Chrome 桌面通知Notification

    今天2016-11-18号,最新chrome版本:V50 在网上找了好久都用不了,因为chrome版本已经是V50了,chrome在V22版本之后就取消掉window.webkitNotificati ...

  5. 用markdown简化书写

    引言 markdown是什么, 谁在使用markdown, 以及为什么我应该/不应该使用它? 我能从这篇文章中了解到什么, 怎么开始使用? markdown有两个含义: 一套标记语法(类比html,w ...

  6. php转化IP为整形

    <?php function a($ip){ $intIP = ip2long($ip); return $intIP; } function b($intIP){ $IPStr = long2 ...

  7. Add Indexer to DynamicJson

    /*-------------------------------------------------------------------------- * DynamicJson * ver 1.2 ...

  8. 【Android进阶学习】shape和selector的结合使用(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/732310 ...

  9. QT生成流水账号

    在做数据库课程的时候,要生成财务表,每条记录应该有一个流水账号. 实现思路: 当前时间+随机一个四位数 上代码 //生成流水号 QString adminRecharge::getNumber() { ...

  10. [vue案例的知识点]todo-list

    文章的原材料来自于vue的官方示例:https://cn.vuejs.org/v2/examples/todomvc.html,我们在学习过程中,试着对其中的一些知识点进行记录: 一.浏览器数据存储, ...