当前位置: 首页 > news >正文

C# Action和delegate区别及示例代码

Action和delegate类似但没有返回值

Action和delegate在C#编程语言中有明显的区别,主要体现在它们的定义、用途和特性上。

1. 定义

  • Delegate:Delegate是C#中用于定义方法签名的类型,它允许将方法作为参数传递,或者将方法赋值给变量。Delegate是一种类型安全的函数指针,至少可以有0个参数,最多可以有32个参数,并且既可以没有返回值,也可以指定返回值类型。
  • Action:Action是C#中的一个泛型委托,它特别用于表示无返回值的方法。Action至少可以有0个参数,最多可以有16个参数,且这些方法都不应该有返回值。Action内部实际也是使用delegate实现的,但当普通的delegate定义的参数与Action的个数、类型一致时,Action提供了一种更简洁、规范的表示方式。

2. 用途

  • Delegate:由于其灵活性和强大的功能,Delegate在C#中被广泛用于回调方法、事件处理、异步编程等场景。它可以引用任何与定义的方法签名相匹配的方法,包括静态方法和实例方法。
  • Action:Action主要用于表示那些执行某些操作但不返回任何结果的方法。它简化了无返回值方法的委托声明,使得代码更加简洁易读。在需要传递无返回值方法作为参数或返回值的场景中,Action是一个很好的选择。

3. 特性

  • Delegate:具有高度的灵活性和可重用性,可以引用多种类型的方法,包括静态方法和实例方法。同时,Delegate支持链式调用(通过+-操作符),允许将多个委托组合成一个委托链。
  • Action:作为无返回值的泛型委托,Action提供了一种更简洁、规范的表示方式。与普通的Delegate相比,它在声明和使用时更加直观和方便。此外,由于Action的泛型特性,它还可以轻松地处理不同数量和类型的参数。

4. 示例

  • Delegate示例

    public delegate int AddDelegate(int a, int b);  
    public static int Add(int a, int b) { return a + b; }  AddDelegate del = new AddDelegate(Add);  
    int result = del(1, 2); // 结果为3
  • Action示例

    Action<int, int> act = (a, b) => Console.WriteLine(a + b);  
    act(1, 2); // 输出3

类似函数指针,代码示例

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ActionDemo : MonoBehaviour
{Action  action;//表示无参Action<int> action1;//表示有传入参数intvoid Start(){action = actionH1;//没有参数action();action1 = actionH2;//一个 int参数 action1(456);actionH3(() => { Debug.Log("执行完actionH3了"); });//lambda 表达式 来执行委托actionH3(actionH4);//执行完 actionH3后回调 actionH4方法}private void actionH1()//没有参数{Debug.Log(123);}private void actionH2(int index)//参数int{Debug.Log(index);}private void actionH3(Action act)//参数 Action{Debug.Log("在执行actionH3");act();//回调 这个 委托方法}private void actionH4()//执行完 actionH3后的回调执行{Debug.Log("执行完actionH3了");}
}

综上所述,Action和Delegate在C#中各有其独特的定义、用途和特性。选择使用哪一个主要取决于具体的编程需求和场景。

相关文章:

C# Action和delegate区别及示例代码

Action和delegate类似但没有返回值 Action和delegate在C#编程语言中有明显的区别&#xff0c;主要体现在它们的定义、用途和特性上。 1. 定义 Delegate&#xff1a;Delegate是C#中用于定义方法签名的类型&#xff0c;它允许将方法作为参数传递&#xff0c;或者将方法赋值给变…...

深度优先搜索: 探索图结构的括号化旅程

深度优先搜索: 探索图结构的括号化旅程 图的括号化结构示例图深度优先搜索的伪代码C语言实现解释运行结果总结在解决图相关问题时,深度优先搜索(DFS)是一种非常有用的算法。DFS 通过递归或使用栈的方式遍历图的节点,尽可能深地搜索每一个分支,然后回溯以搜索其他未访问的节…...

LINUX网络编程:传输层

目录 1.端口号 1.1知名端口号 1.2注意 2.UDP协议 2.1UDP报头的格式 2.2UDP的特点 2.3UDP的缓冲区 1.端口号 端口号的作用标识一个网络中主机的一个进程。 网络之间通信无非就是&#xff0c;发送端和接受端进程之间的通信&#xff0c;所以通过ip地址找到目标主机之后&am…...

PyTorch框架

PyTorch是一个开源的深度学习框架&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;团队开发&#xff0c;自2017年发布以来&#xff0c;凭借其出色的灵活性、易用性和强大的功能&#xff0c;在深度学习和机器学习领域得到了广泛的应用和认可。以下是对PyTorch框…...

分布式系统实战经验

分布式系统是现代软件架构的核心部分&#xff0c;它通过多个计算节点协同工作来处理大规模数据和请求&#xff0c;提供高可用性、可扩展性和容错能力。在实际开发和运维中&#xff0c;构建分布式系统需要考虑多方面的挑战。以下是一些在分布式系统中的实战经验&#xff1a; 1.…...

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…...

WhaleStudio 与飞腾 S5000C 处理器完成产品兼容测试!

中秋佳节后喜讯传来&#xff01;经过飞腾信息技术有限公司和北京白鲸开源科技有限公司的联合严格测试&#xff0c;白鲸开源 WhaleStudio 套件 V2.6 版本已在飞腾信息技术有限公司的腾云 S5000C 处理器平台上成功安装并稳定运行。 这标志着白鲸开源商业与飞腾的合作进入了一个新…...

【Arduino】Arduino使用USB-TTL无法下载程序问题

问题描述 自己绘制了一套基于Arduino MEGA的电路&#xff0c;没有在板子上面绘制CH340的标准下载电路&#xff0c;只保留了UART0的插针用于调试和下载程序。 使用ISP烧录完bootloader后&#xff0c;发现无法使用USB-TTL工具烧录程序 问题解决过程 在网上搜索了相关资料&…...

使用源代码编译R包的过程

R包的安装方式可以归纳为 源代码安装 和 二进制文件安装 两类&#xff1a; 源代码安装 是指从包的源代码进行编译安装。包括&#xff1a;① 通过CRAN安装源代码版本的包&#xff08;如果没有二进制版本&#xff0c;或者指定了安装源代码&#xff09;。② 从GitHub、Bioconducto…...

基于JavaWeb开发的java springboot+mybatis电影售票网站管理系统前台+后台设计和实现

基于JavaWeb开发的java springbootmybatis电影售票网站管理系统前台后台设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获…...

【论文阅读】Face2Diffusion for Fast and Editable Face Personalization

code&#xff1a;mapooon/Face2Diffusion: [CVPR 2024] Face2Diffusion for Fast and Editable Face Personalization https://arxiv.org/abs/2403.05094 (github.com) 论文 介绍 目标&#xff1a;向 T2I 模型不知道的图像中插入特定概念&#xff08;例如某人的脸&#xff…...

金钥匙系列:Kubernetes (K8s) 服务集群技术栈学习路线

维护Kubernetes (K8s) 服务集群是一个复杂且多层次的技术任务&#xff0c;涉及容器化技术、集群管理、网络、安全、监控等多个领域。为了成为一名优秀的K8s集群维护工程师&#xff0c;技术栈需要广泛且深入。本文将为你详细介绍从零开始到深入掌握K8s集群维护的职业技术栈学习路…...

centos远程桌面连接windows

CentOS是一款广泛使用的Linux发行版&#xff0c;特别是在服务器领域。很多企业和个人用户会选择远程连接到CentOS进行操作和维护。虽然CentOS自带了一些远程桌面解决方案&#xff0c;但它们在使用上存在一些局限性。接下来&#xff0c;我将介绍如何实现CentOS的远程桌面连接&am…...

Android 系统下:普通应用无缝安装,Launcher 应用安装遭遇罕见障碍解析

目录 一、场景 1.1 错误分析 1.2 解决方法尝试 1.2.1 检查应用的安装位置 1.2.2 使用ADB安装 1.2.3 检查APK的签名 1.2.4 检查可用的内部存储空间 1.2.5 将应用程序安装到设备的内部存储空间 1.2.6 重置设备&#xff08;谨慎使用&#xff09; 1.2.7 获取Root权限&…...

VMware vCenter Server 8.0U3b 发布下载,新增功能概览

VMware vCenter Server 8.0U3b 发布下载&#xff0c;新增功能概览 Server Management Software | vCenter 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vcenter-8-u3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysi…...

Unity 百度AI实现无绿幕拍照抠像功能(详解版)

目录 一、前言 1.抠像效果 2.去哪找百度ai抠图 3.基础流程跳过 二、获取AccessToken 1.什么是Token 2.为什么要获取Token 3.如何获取token 4.解析json 5.完整代码 三、抠像 1.准备地址 2.建立链接&#xff0c;和基本配置 3.图片格式转换 4.开始上传 5.获取回复…...

MySQL_表的基本操作

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…...

【网站架构部署与优化】源码编译安装LAMP

文章目录 LAMP架构概述各组件的主要作用构建LAMP平台的安装顺序 编译安装Apache httpd服务指南1. 准备工作1.1 关闭防火墙并传输软件包1.2 安装环境依赖包 2. 配置软件模块2.1 解压软件包2.2 移动apr组件包2.3 配置httpd 3. 编译及安装4. 优化配置4.1 配置文件路径4.2 添加http…...

【Linux】Linux的基本指令(1)

A clown is always a clown.&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;Linux的背景 •&#x1f330;1.Unix发展的历史 •&#x1f330;2.Linux发展历史 •&#x1f330;3.企业应用现状 •&#x1f330;4.发行版本 &…...

Python安装虚拟环境Conda

这里写自定义目录标题 Conda介绍Conda下载与安装下载地址安装检查是否安装成功Conda中的几个重要目录 envs、pkgspkgs文件夹envs文件夹 Conda 使用教学查看 Conda 自带库配置下载源设置下载时显示通道地址创建Conda 环境查看Conda 环境克隆环境Conda 环境导出环境配置从配置文件…...

基于STM32设计的烘干车间远程控制系统(腾讯云IOT)(228)

文章目录 一、前言1.1 项目介绍【1】项目背景【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】项目背景【5】摘要1.4 开发工具的选择【1】设备端开发【2】上…...

Nginx泛域名 解析的匹配前缀绑定或转发到子目录

网站的目录结构为&#xff1a; # tree /home/wwwroot/landui.com /home/wwwroot/landui.com ├── bbs │ └── index.html └── www └── index.html 2 directories, 2 files /home/wwwroot/landui.com为nginx的安装目录下默认的存放源代码的路径。 bbs为论坛…...

黑神话悟空mac可以玩吗

黑神话悟空mac上能不能玩对于苹果玩家来说很重要&#xff0c;那么黑神话悟空mac可以玩吗&#xff1f;目前是玩不了了&#xff0c;没有针对ios系统的版本&#xff0c;只能之后在云平台上找找了&#xff0c;大家可以再观望下看看。 黑神话悟空mac可以玩吗 ‌使用CrossOver‌&…...

Nuxt Kit 中的插件:创建与使用

title: Nuxt Kit 中的插件:创建与使用 date: 2024/9/19 updated: 2024/9/19 author: cmdragon excerpt: 摘要:本文介绍了在 Nuxt 3 框架中使用 Nuxt Kit 创建和管理插件的方法,包括使用addPlugin注册插件、创建插件文件、在Vue组件中使用插件,以及使用addPluginTemplate…...

C++(虚构造与虚析构/类型信息运算符/强制类型转换)

一、虚构造与虚析构 1、构造函数能否是虚函数&#xff0c;为什么&#xff1f; 对象有创建过程&#xff1a; 1、给对象分配内存 2、根据继承表顺序调用父类构造 3、根据成员对象的的定义顺序调用成员对象的构造函数 4、执行对象自己的构造函数 如果父类的构造函数函数设计…...

python毕业设计基于django+vue医院社区医疗挂号预约综合管理系统7918h-pycharm-flask

目录 技术栈和环境说明预期达到的目标具体实现截图系统设计Python技术介绍django框架介绍flask框架介绍解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示操作可行性技术路线感恩大学老师和同学详细视频演示源码获取 技术…...

tidb 集群搭建

官网的搭建文档&#xff1a;使用 TiUP 部署 TiDB 集群 | TiDB 文档中心 我本地使用三台 centos7.9 服务器搭建&#xff0c;要保证三台服务器之间是可以互相通信的&#xff1b; 搭建集群的命令在其中一台服务器上执行即可&#xff1b; 1、安装tiup&#xff1a; curl --proto …...

SpringBoot开发——Spring Boot Controller 最佳实践

文章目录 1、RESTful接口地址的定义规则2、设计通用控制器基类3、统一的返回对象设计4、统一的异常处理5、实际案例: 订单控制器 (OrderController)结论 随着微服务架构的普及&#xff0c;RESTful API已经成为现代Web服务的标准设计模式。Spring Boot为开发者提供了强大的工具来…...

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …...

Python编程 - 协程

前言 上篇文章主要讲述了python的进程&#xff0c;进程池和进程与线程对比等知识&#xff0c;接下来这篇文章再唠唠python的协程&#xff0c;让我们继续往下看&#xff01; 一、协程的使用 python 中的协程是一种用于处理并发任务的高效工具&#xff0c;它依赖于 asyncio 库以…...