C# 委托(Delegate)与事件(Event)、Func与Action

2023-05-16

一、委托

1. 概念:

        从内存角度看,委托是一个存储方法的容器,当使用该容器时,会把容器里面的方法全部执行一遍,容器里面的方法可增(+=)可减(-=)。

        从IL(Microsoft中间语言)角度看,委托是一个类(class),使用new关键字实例化,并需要传递一个参数,参数为方法名称。

2. 使用

(1)定义委托

 (2)定义方法

(3)实例化委托并执行

3. 补充

(1)委托里面存储的方法可以是静态方法也可以是非静态的方法。

(2)当声明的委托包含返回值时,不能直接调用Invoke方法,否则只会得到最后一个方法的结果。

(3)定义委托与定义方法相比,一是没有方法体,二是用多了delegate修饰。

二、事件

1. 概念:事件是一个受限制的委托变量。如何理解呢,先看以下关于委托的使用代码:

 

 这里我们能看到,在类MyDelegateClass中声明的委托,既可以在当前内中被执行,也可以在其他类中被执行,还可以在其他类中重新赋值后在被调用执行。

接下来我们看看用事件声明的情况:

 

 这里我们看到声明事件其实就是在声明委托变量的条件下,只用了个event修饰而已,即myDelegate现在是一个事件变量,而不是一个委托变量了,我们发现它仍然能在当前类中被执行,但是在另外一个类中,既不能被直接调用执行,也不能被重新赋值了,只能通过+=或-=来增减函数。这就是事件存在的必要,因为事件的这两个限制条件,在某种程度上会更安全。

 2. 声明:

在声明委托的基础上,使用event关键字修饰

三、多播委托

1. 概念:存储了不止一个方法的委托就是多播委托。

 

四、实际开发中常用的系统提供的委托和事件

(1)Func<> : 这是系统定义的带有返回值的委托,泛型中的最后一个类型一定是返回值类型,前面所有的都是参数类型,可以传入多个参数。

 

(2)Action<> : 这是系统定义的不带返回值的委托,泛型中的所有数据类型都是参数类型。

(3)EventHandler<> :  系统定义的委托,通常使用事件声明来使用

说明:关于以下两种声明和调用方式的使用,看个人习惯,对不同的人,各有优势。

   

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 委托(Delegate)与事件(Event)、Func与Action 的相关文章

随机推荐

  • Linux i2c_driver probe被调用的流程分析(linux4.1.15)

    linux4 1 15 i2c driver probe被调用流程 span class token operator span span class token operator span span class token comment
  • linux uart 驱动中 open、read、write调用层次

    span class token comment Linux kernel release 2 6 xx span span class token comment linux uart 驱动中接收和发送函数的调用层次 xff0c 记录如下
  • Centos8 制作qcow2及使用

    制作及使用方法如下 xff1a 1 下载ios wget https archive kernel org centos vault 8 2 2004 isos x86 64 CentOS 8 2 2004 x86 64 dvd1 iso
  • 免费的期刊论文文献检索网站(收集整理)

    文献免费下载神器 xff0c 这里放5个可以直接下载SCI等论文网站 以下网站去地址栏直接搜 xff01 1 Sci Hub可谓是无人不知无人不晓 xff0c 其自开发以来 xff0c 便以星火燎原之势席卷学术界 xff0c 因为它可以免费
  • k8s 中 pod 之间的通信

    1 pod 内部通信 xff1a 通过 localhost 通信 2 同节点不同 pod 之间通信 xff1a 通过 linux 虚拟以太网设备或者是用两个虚拟接口组成的以太网接口对不同的网络命名空间连接起来通信 3 不同节点的不同 pod
  • 从零写VIO|第二节——作业:使用Allen方差工具标定IMU

    这里写目录标题 作业内容1 安装im utils1 1 安装依赖 xff1a 1 2 编译1 3 可能出的错误 2 运行 2 1 采集IMU数据 2 2 生成imu bag2 3 新建imu launch文件2 4 播放数据2 5 61 6
  • [VIO|实践]UBUNTU16.04跑MSCKF-双目代码

    编译环境 编译 新建文件夹msckf catkin ws xff0c 里面再建一个叫src的文件夹 xff0c 然后把解压好的代码集msckf放进去 命令行进入到 msckf catkin ws这一层 xff0c 进行catkin make
  • 华为系列设备优先级总结(一)

    现整理一部分华为系列交换机 路由器各项配置优先级 xff0c 欢迎各位朋友收藏备查 xff0c 若有遗漏或者是错误 xff0c 也欢迎在评论区提出交流 本文主要适合具有一定基础的网络工程师查阅参考 xff0c 阅读本文 xff0c 需要对本
  • OSPFv3中LSA详解(一)——概述

    今天给大家详细介绍一下OSPFv3中LSA的变化 xff0c 这也是OSPFv3相对于OSPFv2的一大重要改变 本文将详细介绍OSPFv3中9类LSA相对于OSPFv2中7类LSA的异同 阅读本文 xff0c 您需要有一定的OSPFv2和
  • OSPFv3中LSA详解(五)——Intra-Area-Prefix LSA详解

    今天继续给大家介绍OSPFv3中LSA变化 xff0c LSA的变化时OSPFv3相对于OSPFv2的一大重大改变 xff0c 本文的主要内容是OSPFv3中新增的一类LSA Intra Area Prefix LSA的详解 阅读本文 xf
  • OSPFv3中LSA详解(六)——Type3类LSA详解

    今天继续给大家介绍OSPFv3中LSA变化 xff0c LSA的变化时OSPFv3相对于OSPFv2的一大重大改变 xff0c 本文的主要内容是OSPFv3中变化的第三类LSA的详解 阅读本文 xff0c 您需要有一定的OSPF基础知识 x
  • OSPFv3中LSA详解(七)——Type4类LSA详解

    今天继续给大家介绍OSPFv3中LSA变化 xff0c LSA的变化时OSPFv3相对于OSPFv2的一大重大改变 xff0c 本文的主要内容是OSPFv3中变化的第四类LSA的详解 阅读本文 xff0c 您需要有一定的OSPF基础知识 x
  • KVM详解(六)——KVM虚拟机快照

    今天继续给大家介绍Linux运维相关知识 xff0c 本文主要内容是KVM的快照 一 KVM快照简介 KVM支持对虚拟机创建快照 xff0c 但是前提是该虚拟机镜像不可以是raw格式 xff0c 而应该是qcow2格式 但是 xff0c 如
  • Docker详解(十五)——Docker静态IP地址配置

    今天继续给大家介绍Linux运维相关知识 xff0c 本文主要内容是Docker静态IP地址配置 一 安装Docker桥接网络 在前文Docker详解 xff08 十四 xff09 Docker网络类型详解中 xff0c 我们讲解了Dock
  • 计算机硬盘备份和恢复解决方案

    问题背景 xff1a 项目需要提供一份系统使用的计算机硬盘备份和恢复方案 xff0c 方便计算机软硬件故障后快速的恢复系统 之前项目使用的工具是Macrium reflect工具 xff0c 但这个工具现在收费了 xff0c 而且功能比较多
  • Python函数详解(一)——函数的定义、调用及变量

    今天继续给大家介绍Python相关知识 xff0c 本文主要内容是Python函数的定义 调用及变量 一 Python函数的定义与调用 在Python中 xff0c 如果我们要反复的进行一种相同或者类似的代码 xff0c 那么我们就可以将这
  • vscode SSH 保存密码自动登录服务器vs code

    先在win local mac 上拿到公钥和私钥 xff0c 然后再把这公钥copy 进服务器 让ssh 身份认证转化为秘钥认证 xff08 mac也是一样的 xff09 1 创建 RSA 密钥对 第一步是在客户端机器 xff08 通常是您
  • 普罗米修斯

    普罗米修斯 xff08 Prometheus xff09 概述 Prometheus是一套开源的监控 报警 时间序列数据库的组合 xff0c 起始是由SoundCloud公司开发的 从2016年加入CNCF xff0c 2016年6月正式发
  • ROS-mavros-PX4加速度控制

    要写的飞控算法本来的输入是roll pitch以及推进力 xff0c 由于PX4不支持输入具体大小的推进力 xff0c 改用三方向加速度 xff08 可用旋转矩阵进行变换 xff09 进行控制 但是PX4的setpoint accel实际控
  • C# 委托(Delegate)与事件(Event)、Func与Action

    一 委托 1 概念 xff1a 从内存角度看 xff0c 委托是一个存储方法的容器 xff0c 当使用该容器时 xff0c 会把容器里面的方法全部执行一遍 xff0c 容器里面的方法可增 43 61 可减 61 从IL Microsoft中