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

C#-委托delegate

C#-委托delegate

通常情况下,函数内部需要调用其他函数来实现代码的重用,但这样有一个问题:
如果需要更换所调用的函数则需要对该函数的定义再次修改,
事实上,在程序运行过程中,函数也是作为一个存储在堆中的对象,
这样我们也可以通过设置引用函数的变量的方式实现方法调用的修改,
这种引用函数的变量被称为委托类型变量。
使用引用类型步骤如下:

1、声明委托数据类型

由于函数可以通过名称、返回值、参数类型及个数等方面区分出许多不同类型。
因此使用委托类型需要首先声明所调用的函数属于什么类型,格式如下:

public delegate T FunctionType<T>(T a,T b);

从类型定义中,我们可以看到,委托类型所调用的函数需要返回值类型和参数列表匹配才能正常使用。
(对于类型多样的返回值和参数列表,可以定义泛型委托)

2、在函数生命时使用定义好的委托类型做参数

public static T Call<T>(T a,T b,FunctionType<T> functionName) where T:struct
{return functionName(a,b);
}

3、存在多个除函数名外相同类型的函数可以调用

static int Add(int a,int b)
{return a + b;
}
static int Sub(int a,int b) { return a - b; }

4、函数调用时将函数名作为参数传递

Console.WriteLine(ToolTestDelegate.Call<int>(2, 3, Add));
Console.WriteLine(ToolTestDelegate.Call<int>(2,3,Sub));

5、System空间中定义了很多委托(最多可以有16个参数)

视图->对象浏览器

(1)Func带返回值的委托

Func<int, int, int> func = Add;
Console.WriteLine(func(1, 2));

(2)Action不带返回值的委托

Action<Animal> action = MakeAnimal2;
action(new Dog());

6、委托合并(委托多播)

d1 = method1;
d2 = method2;
d3 = d1 + d2;
d3("C");//同时调用method1和method2

相关文章:

C#-委托delegate

C#-委托delegate 通常情况下&#xff0c;函数内部需要调用其他函数来实现代码的重用&#xff0c;但这样有一个问题&#xff1a; 如果需要更换所调用的函数则需要对该函数的定义再次修改&#xff0c; 事实上&#xff0c;在程序运行过程中&#xff0c;函数也是作为一个存储在堆中…...

编译Thingsboard3.7.0的过程记录

1、首先去掉test测试&#xff0c;否则会有一堆问题&#xff0c;pom.xml修改如下&#xff1a; <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${surefire.version}</ve…...

vulnhub-THE PLANETS-EARTH靶机

下载并导入靶机至VMWare&#xff0c;设置网络模式为NAT&#xff0c;开机 开启攻击机&#xff08;kali&#xff09;&#xff0c;也设置为Nat模式&#xff0c;与靶机处于同一网段 扫描靶机ip Nmap 192.168.114.0/24 扫描网段内活跃的主机 可以推断靶机ip为192.168.114.129 扫描…...

【C语言】分支和循环(2)

&#x1f914;个人主页: 起名字真南 &#x1f619;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 关系操作符2 条件操作符3 逻辑操作符 &#xff1a;|| &#xff0c;&& &#xff0c;&#xff01;3.1 逻辑取反运算符3.2 与运算符3.3 或运算符3.4 练习闰年判断3.5 短…...

Python数据分析-远程办公与心理健康分析

一、研究背景 随着信息技术的飞速发展和全球化的推进&#xff0c;远程工作&#xff08;Remote Work&#xff09;成为越来越多企业和员工的选择。尤其是在2020年新冠疫情&#xff08;COVID-19&#xff09;爆发后&#xff0c;全球范围内的封锁措施使得远程工作模式迅速普及。根据…...

LabVIEW提高开发效率技巧----使用动态事件

在LabVIEW开发过程中&#xff0c;用户交互行为可能是多样且不可预知的。为应对这些变化&#xff0c;使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧&#xff0c;并结合实际案例&#xff0c;说明如何通过动态事件提高程序…...

【STM32开发之寄存器版】(五)-窗口看门狗WWDG

一、前言 窗口看门狗简介&#xff1a; 窗口看门狗通常被用来监测&#xff0c;由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新&#xff0c;看门狗电路在达到预置的时间周期时&#xff0c;会产生一个M…...

Leetcode203.移除链表元素-Python

题目链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&a…...

属性拷贝MapStruct

端请求通过VO对象接收&#xff0c;并通过DTO对象进行流转&#xff0c;最后转换成DO对象与数据库DAO层进行交互&#xff0c;反之亦然。 当业务简单的时候&#xff0c;可以通过手动编码getter/setter函数来复制对象属性。但是当业务变的复杂&#xff0c;对象属性变得很多&#x…...

Chromium 添加书签功能浅析c++

1、在点击添加书签时候此UI控制逻辑代码在 chrome\browser\ui\views\bookmarks\bookmark_bar_view.cc chrome\browser\ui\views\bookmarks\bookmark_bar_view.h 可以在此看到完成 移除 按钮逻辑&#xff0c;以及书签监听事件等。。。 // Implementation for BookmarkNodeAdd…...

Spring Cloud Netflix Ribbon 负载均衡详解和案例示范

1. 引言 在传统的集中式架构中&#xff0c;负载均衡器一般是放置在服务器端的&#xff0c;例如 Nginx等。随着微服务架构的兴起&#xff0c;服务实例的数量和部署地点变得更加动态和分布式&#xff0c;这使得在客户端进行负载均衡成为了一种可行且更灵活的方案。Netflix Ribbo…...

Armeria gPRC 高级特性 - 装饰器、无框架请求、阻塞处理器、Nacos集成、负载均衡、rpc异常处理、文档服务......

文章目录 定义一个示例高级特性装饰器概述简单案例多种装饰方式 无框架请求概述使用方式 阻塞任务处理器背景概述多种使用方式 rpc 异常统一处理使用方式更详细的异常信息 Armeria 提供 gRPC 客户端多种调用方式同步调用异步调用使用装饰器 负载均衡简单案例Armeria 提供的所有…...

如何制作一个企业网站,建设网站的基本步骤有哪些?

企业网站是企业的门面和名片&#xff0c;决定网民对企业的第一印象&#xff0c;因此&#xff0c;现在很多公司想做一个属于自己网站&#xff0c;但是不知道怎么做&#xff0c;更不知道从何做起&#xff0c;更别说做成了。为了能够让大家清楚如何做一个企业网站&#xff0c;现在…...

01-python+selenium自动化测试-基础学习

前言 基于python3和selenium3做自动化测试&#xff0c;俗话说&#xff1a;工欲善其事必先利其器&#xff1b;没有金刚钻就不揽那瓷器活&#xff0c;磨刀不误砍柴工&#xff0c;因此你必须会搭建基本的开发环境&#xff0c;掌握python基本的语法和一个IDE来进行开发&#xff0c…...

【redis-05】redis保证和mysql数据一致性

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…...

写一个登录判断机制py

创建一个简单的登录机制涉及到用户输入的验证和与数据库中存储的凭证的比较。以下是一个使用Python语言和SQLite数据库的示例。这个例子仅用于教学目的&#xff0c;实际应用中应该使用更安全的方法来存储和验证密码&#xff0c;比如使用密码哈希。 首先&#xff0c;你需要安装…...

特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。

特征点检测与匹配是计算机视觉中的基础任务之一&#xff0c;广泛应用于图像配准、物体识别、运动估计、三维重建等领域。下面是一些关键的知识点&#xff1a; 1. 特征点检测 特征点检测的目的是从图像中找到独特的、稳定的点&#xff0c;这些点在图像变化&#xff08;如旋转、…...

python——Echarts现交互式动态可视化

数据展示 20192018201720162015201420132012北京5817.15785.91765430.78755081.264723.864027.16093661.10973314.934天津2410.252106.23972310.35522723.52667.112390.35182079.07161760.0201河北3742.673513.86433233.83322849.872649.182446.61662295.62032084.2825山西234…...

【含开题报告+文档+PPT+源码】基于SSM框架的民宿酒店预定系统的设计与实现

开题报告 随着人们旅游需求的增加&#xff0c;民宿行业呈现出快速发展的趋势。传统的住宿方式逐渐无法满足人们对个性化、舒适、便捷的需求&#xff0c;而民宿作为一种新型的住宿选择&#xff0c;逐渐受到人们的青睐。民宿的特点是具有独特的风格、便捷的地理位置、相对亲近的…...

正确理解协程

import asyncio# 定义一个异步函数&#xff08;协程&#xff09; async def say_after(delay, what):# 等待指定的时间await asyncio.sleep(delay)# 打印消息print(what)# 定义另一个异步函数 async def main():# 同时启动两个协程&#xff0c;并等待这2个协程结束await say_af…...

Codex 上下文提供详解与操作指南

1. 文档目标 这份文档解决的是一个非常实际的问题&#xff1a; 怎么给 Codex 足够完整的上下文什么信息是必须给的&#xff0c;什么信息是可选但高价值的怎样让 Codex 在一次任务里快速进入正确状态怎样避免“我已经说了很多&#xff0c;但结果还是不对”怎样把上下文提供方式变…...

英雄联盟终极工具箱:5个实用技巧让你游戏效率翻倍

英雄联盟终极工具箱&#xff1a;5个实用技巧让你游戏效率翻倍 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari英雄联盟工具箱是一…...

谷歌CEO官宣“75%新代码AI写”:当AI代码量占比逼近阈值,你的工程质量如何托底?

2026年4月22日&#xff0c;谷歌CEO桑达尔皮查伊在Cloud Next 2026大会上扔出一枚重磅炸弹&#xff1a;谷歌内部75%的新代码已由AI编写&#xff0c;经工程师审核后合并。这一数字比去年秋天的50%又跃升了一大截。同时&#xff0c;第八代TPU、Workspace Intelligence等多款AI产品…...

GitHub平台功能全解析:AI代码创作、安全保障及多场景解决方案助力开发

导航菜单可进行切换导航操作。[ ](/)[ 登录 ](/login?return_tohttps%3A%2F%2Fgithub.com%2Fanthropics%2Fclaude-for-legal)可进行外观设置。平台AI代码创作- [GitHub Copilot&#xff1a;借助AI编写更优质代码](https://github.com/features/copilot)- [GitHub Spark&#x…...

FontForge入门指南:从零开始设计你的第一套字体

FontForge入门指南&#xff1a;从零开始设计你的第一套字体 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 你是否曾想过亲手设计一套属于自己的字体&#xff1f;Fon…...

避坑指南:CCPD车牌数据集预处理中,OpenCV透视变换的3个常见错误与修复方法

CCPD车牌数据集预处理实战&#xff1a;透视变换的3个隐蔽陷阱与工业级解决方案 当你在深夜的显示器前反复调试CCPD数据集的预处理代码&#xff0c;却发现透视变换后的车牌图像像被无形之手扭曲——边框错位、字符拉伸、坐标偏移。这不是算法问题&#xff0c;而是OpenCV实战中那…...

NotebookLM如何3分钟解析薛定谔方程?——物理学者私藏的7个Prompt工程技巧曝光

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM物理学研究辅助 NotebookLM 是 Google 推出的基于 LLM 的研究型笔记工具&#xff0c;专为学者与科研人员设计。在物理学研究中&#xff0c;它可高效整合 PDF 论文、实验日志、LaTeX 公式片段…...

这3个降AI提示词千万别用!让你的知网AI率反涨10个点过不了AIGC检测

这3个降AI提示词千万别用&#xff01;让你的知网AI率反涨10个点过不了AIGC检测 室友的真实事故——降 AI 提示词用错知网 AI 率反涨 3 月 19 号晚上室友哭着发消息&#xff1a;「我上网搜了一个降 AI 万能提示词改完段落送知网测——AI 率从 67% 涨到 77% 了&#xff01;这怎…...

security.txt项目贡献指南:如何参与开源安全标准制定

security.txt项目贡献指南&#xff1a;如何参与开源安全标准制定 【免费下载链接】security-txt A proposed standard that allows websites to define security policies. 项目地址: https://gitcode.com/gh_mirrors/se/security-txt security.txt是一项重要的开源安全…...

Vivado XADC IP核 配置与接口实战解析

1. XADC IP核基础入门 XADC&#xff08;Xilinx Analog-to-Digital Converter&#xff09;是Xilinx FPGA芯片内置的高精度模拟数字转换模块&#xff0c;它能实时监测芯片内部的电压、温度以及外部模拟信号。在Vivado开发环境中&#xff0c;我们可以通过XADC Wizard IP核快速配置…...