C# 委托函数 delegate

在C#中,委托(Delegate)是一种特殊的类型,它可以持有对方法的引用。
委托是实现事件的基础。事件本质上是多播委托,允许多个方法被触发

委托允许你将方法作为参数传递给其他方法,或者将方法作为返回值从方法返回,或者将方法赋值给变量。(可以用作函数的参数、返回值、给变量赋值)

  • delegate:具有相同签名和返回值类型的有序方法列表
  • 有序方法列表:有序的放入几个函数地址,被称为调用列表
  • 当委托被调用时, 调用列表中的每一个方法
    在这里插入图片描述

和C++的函数指针类似,但委托是面向对象且类型安全的

委托中保存的方法,或者说存入委托中的函数可以来自任何类或结构,只要他们符合委托的定义

  • 返回值
  • 签名(包括ref ,out 修饰符)
    在这里插入图片描述

以下是委托的一些基本概念和用法:

委托的定义和使用

切记委托是一种类型!!!

public delegate int MyDelegate(int x, int y);
public int Add(int x, int y) {return x + y;
}
// 实例化委托
MyDelegate addDelegate = new MyDelegate(Add);
int result = addDelegate(2, 3); // 输出 5

可以理解为,委托的实例化其实是将函数的地址存入委托列表中。
因为一个委托中可以放入多个函数

在这里插入图片描述

为委托增加方法

在这里插入图片描述

用于调用委托的参数将会用于调用-调用列表中的每一个方法,除非有一个参数输出参数

调用带有返回值的委托

在这里插入图片描述

匿名方法

delegate (input parameters)
{code
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匿名函数有什么用???
为了给委托快速赋值?
有点子多余

Lambda 表达式 – 匿名函数的优化版

C# 3.0 引入了Lambda表达式,它是一种更简洁的语法来定义匿名方法:

在这里插入图片描述

在这里插入图片描述

lambda可以直接转为delegate 类型

在这里插入图片描述

Func - lambda和委托函数的中间商

 public delegate TResult Func<in T, out TResult>(T arg);
//这是一个泛型委托,表示一个接受一个类型为T的参数,并返回一个TResult的函数。Func<TSource, bool> 
//这个泛型委托,接受一个TSource类型的参数并返回一个bool值
//它通常用于定义谓词(Predicate),即一个返回真或假的函数,常用于过滤集合中的元素。

Func是C#的内置泛型委托,以便更加简洁方便的使用委托
这样不用再定义委托-实例化委托。

结合匿名函数Func作为形参,最终传入的实参可以是:
x => x==1 等形式
即 一个传入X参数,返回bool值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示

Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 目录 Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 一、简单介绍 二、共享纹理 1、共享纹理的原理 2、共享纹理涉及到的关键知识点 3、什么可以实现共享 不能实现共享…

fomo3d是什么

目录 fomo3d是什么 一、Fomo3D概述 二、Fomo3D的玩法 三、Fomo3D的资金流向 四、举例说明 fomo3d是什么 Fomo3D是一款在以太坊网络上运行的去中心化资金盘游戏,也是一款基于智能合约的区块链游戏。以下是对Fomo3D的详细说明,包括其特点和举例说明: 一、Fomo3D概述 定义…

运维 | 清理 Linux 磁盘空间方法汇总

清理 Linux 磁盘空间方法汇总 前言 系统磁盘不够用或占满了&#xff0c;导致部分应用或程序无法正常使用。 本章节将记录一些常用或常见的方法清理系统磁盘&#xff08;持续更新中&#xff09;。 常见操作 查看磁盘使用情况 cd / df -Th查找大文件和目录&#xff08;根目…

微服务安全——SpringSecurity6详解

文章目录 说明SpringSecurity认证快速开始设置用户名密码基于application.yml方式基于Java Bean配置方式 设置加密方式自定义用户加载方式自定义登录页面前后端分离认证认证流程 SpringSecurity授权web授权:基于url的访问控制自定义授权失败异常处理方法授权:基于注解的访问控制…

沐风老师3DMAX一键烘焙插件使用方法

3DMAX一键烘焙插件使用教程 3DMAX一键烘焙插件&#xff1a;从3dMax2021增加了一个新功能是全新的BakingToTexture&#xff08;烘焙到纹理&#xff09;工具。s3DMAX一键烘焙插件是新BakingToToTorTexture的简化前端。它允许用户一键烘焙某些实用程序映射&#xff08;贴图&#x…

MySQL 数据表

InnoDB存储引擎文件 InnoDB存储引擎相关的文件包括重做日志文件、表空间文件。 表空间文件 InnoDB存储引擎在设计上模仿了Oracle&#xff0c;将存储的数据按表空间进行存放。默认配置下&#xff0c;会有一个初始化大小为10MB、名为ibdata1的文件&#xff0c;该文件就是默认的…

FlutterFlame游戏实践#16 | 生命游戏 - 编辑与交互

theme: cyanosis 本文为稀土掘金技术社区首发签约文章&#xff0c;30天内禁止转载&#xff0c;30天后未获授权禁止转载&#xff0c;侵权必究&#xff01; Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

liunx 挂载硬盘以及自启挂载

一、确认硬盘已连接并识别 查看硬盘设备名称&#xff1a; 使用lsblk或fdisk -l命令查看系统中的硬盘设备名称。这些名称通常类似于/dev/sda、/dev/sdb等。 二、创建挂载点 选择或创建挂载点目录&#xff1a; 挂载点是一个目录&#xff0c;用于将硬盘连接到文件系统的特定位…

Jenkins卡在等待界面解决方法

一、问题 部署jenkins服务器出现Please wait while Jenkins is getting ready to work。 二、原因分析 jenkins里面文件指向国外的官网&#xff0c;因为防火墙的原因连不上。 三、解决方法 将配置文件里面的url换成国内镜像&#xff1a; &#xff08;1&#xff09;修改配…

LLM模型与实践之基于 MindSpore 实现 BERT 对话情绪识别

安装环境 # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp 模型简介 BERT是一种由Google于2018年发布的新型语言模型&#xff0c;它是基于Transforme…

css黑色二级下拉导航菜单

黑色二级下拉导航菜单https://www.bootstrapmb.com/item/14816 body { font-family: Arial, sans-serif; margin: 0; padding: 0; }nav { background-color: #000; /* 导航背景色为黑色 */ }.menu { list-style-type: none; margin: 0; padding: 0; overflow: hidden; }.menu l…

JavaScript(12)——内置对象

JavaScript内部提供的对象&#xff0c;包含各种属性和方法给开发者调用。 Math Math对象是JavaScript提供的一个“数学”对象 包含的方法有&#xff1a; random:生成0-1之间的随机数 ceil&#xff1a;向上取整 floor&#xff1a;向下取整 max&#xff1a;找最大数 min&#…

展馆导览系统架构解析,从需求分析到上线运维

在物质生活日益丰富的当下&#xff0c;人们对精神世界的追求愈发强烈&#xff0c;博物馆、展馆、纪念馆等场所成为人们丰富知识、滋养心灵的热门选择。与此同时&#xff0c;人们对展馆的导航体验也提出了更高要求&#xff0c;展馆导览系统作为一种基于室内外地图相结合的位置引…

java list.stream处理对象集合,根据模糊匹配、IN操作来过滤

在Java中&#xff0c;如果你有一个机构对象&#xff08;比如Agency&#xff09;的集合&#xff0c;并且你想根据机构名称的模糊匹配、机构类型以及机构ID的IN操作来过滤这个集合&#xff0c;你可以使用Java 8及以上版本的Stream API来实现。不过&#xff0c;对于机构ID的IN操作…

Unity显示泰语且兼容泰语音标

前言&#xff1a;使用Unity开发的游戏需要支持泰语本地化&#xff0c;以及解决显示泰语时Unity的bug 目录 1、Text组件显示泰语2、TextMeshPro组件显示泰语 现在很多游戏都需要显示泰语&#xff0c;下面将介绍Unity如何显示泰语&#xff0c;&#xff08;仅介绍Unity字体方面的设…

npm 安装报错(已解决)+ 运行 “wue-cli-service”不是内部或外部命令,也不是可运行的程序(已解决)

首先先说一下我这个项目是3年前的一个项目了&#xff0c;中间也是经过了多个人的修改惨咋了布置多少个人的思想&#xff0c;这这道我手里直接npm都安装不上&#xff0c;在网上也查询了多种方法&#xff0c;终于是找到问题所在了 问题1&#xff1a; 先是npm i 报错在下面图片&…

Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)

Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件&#xff0c;它集成了Word、Excel、PowerPoint等核心应用&#xff0c;并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…

TypeScript 基本用法、any、unknown、never、class、类型断言、数组、接口

大家好&#xff0c;我是有用就扩散&#xff0c;有用就点赞。 TypeScript 基本用法 类型声明 1&#xff09;类型声明的写法&#xff0c;一律为在标识符后面添加“冒号 类型”。函数参数和返回值&#xff0c;也是这样来声明类型。 2&#xff09;TypeScript 规定&#xff0c;变…

AI+HPC 部署优化面试范围分享

背景 最近几年生成式AI技术和自动驾驶技术发展发展很快&#xff0c;这些行业对于算法的运行效率有很高的要求&#xff0c;尤其一个模型在训练完成后运行到设备上&#xff0c;需要大量的工作&#xff0c;包括模型的剪枝、蒸馏、压缩、量化、算子优化、系统优化等。 对于传统的…

Go基础编程 - 12 -流程控制

流程控制 1. 条件语句1.1. if...else 语句1.2. switch 语句1.3. select 语句1.3.1. select 语句的通信表达式1.3.2. select 的基特性1.3.3. select 的实现原理1.3.4. 经典用法1.3.4.1 超时控制1.3.4.2 多任务并发控制1.3.4.3 监听多通道消息1.3.4.4 default 实现非堵塞读写 2. …