C#编程-实现委托


实现委托
委托是可以存储对方法的引用的对象。在C#中,委托允许您动态地改变类中方法的引用。
考虑咖啡售货机的示例,它配置不同口味的咖啡,例如卡布奇诺咖啡和黑咖啡。在选择所需口味的咖啡时,售货机决定混合各种成分,例如奶粉、咖啡粉、热水、卡布奇诺咖啡粉。所有的材料都被放置在售货机内的不同容器中。当您选择喜欢的口味时,就会混合所需的材料,咖啡会从机器出来。
假设您选择了黑咖啡,咖啡机将调用方法以仅混合和倒出热水和咖啡粉。按下配置黑咖啡所需的按钮时,就会动态确定这些方法的引用。
委托是引用类型变量,它包含对方法的引用。可按需在运行时更改此引用。虽然委托在运行时可以间接调用方法,它们在C#编程中主要的用途是实现事件和回调方法。
要在应用程序中实现委托,需要声明委托、实例化委托和使用委托。

声明委托
委托可以引用的方法时由委托声明来决定的。委托可以引用方法,此方法的签名与委托相同。您可以使用delegate关键字声明委托。委托的签名应该与它所引用方法的签名相同。
以下代码行显示了委托声明:
public delegate void MyDelegate ( string s );
在上述代码行中,声明的委托类型可用于引用任意带有一个字符串类型参数和不返回任何值的方法。
下面是委托声明的语法:
delegate <return type><delegate-name><parameter list>
<print>
小问题:
您将使用下面哪个语句来声明称为NewDelegate的委托?
a. public void delegate NewDelegate( string s );
b. public void NewDelegate ( string s );
c. public delegate void NewDelegate ( string s );
d. public void delagate NewDelegate ( string s );
答案:
c. public delegate void NewDelegate ( string s );
</print>
<epub>
</epub>

实例化委托
创建已经创建的委托类型的委托对象。向委托对象指定所需方法的地址。这可以通过调用delegate类的构造函数并传递方法名称来实现。以下代码段显示了如何将方法地址分配给委托变量:
public void DelegateFunction(string PassValue){//Method implementation Here}//Delegate Declarationpublic delegate void MyDelegate( string ArgValue );public void UserMethod(){//Delete InstantiationMyDelegate DelegateObject = new MyDelegate(DelegateFunction);}
在上述代码段中,DelegateFunction()方法的签名和返回类型与MyDelegate委托的委托声明匹配。MyDelegate委托可保存DelegateFunction()方法的地址。
DelegateObject是MyDelegate类型的委托对象。通过将函数名称传递给委托构造函数,DeleteFunction()方法的地址被分配给了DelegateObject对象。
<print>
小问题:
您将使用以下哪个选项通过引用DelegateFunction(string PassValue)方法实例化名为MyDelegate的委托?
a. MyDelegate obj = new MyDelegate( ) ;
obj.DelegateFunction();
b. MyDelegate obj = new MyDelegate ( DelegateFunction() );
c. MyDelegate obj = new MyDelegate( DelegateFunction );
d. MyDelegate obj = new MyDelegate( );
答案:
c. MyDelegate obj = new MyDelegate( DelegateFunction );
</print>
<epub>
</epub>

使用委托
如果需要,您可以通过给出委托的名称和传递参数来调用委托。使用委托类似于调用方法。
考虑一个场景,您需要将信息打印到文件和屏幕。有些需要放入文件和屏幕的公共信息。也有一些特殊的信息要放到文件和屏幕上。打印信息到文件和屏幕的方法时不同的。您可以在运行时通过传递公共信息来调用这些方法。
以下代码显示了委托的用法:
/* This code is to print data to the output device , which is either a file or a screen */using System;using System.IO;/* Program to write the data to the console and file */namespace delegates_Ex1{public class PrintToDevice{相关文章:
C#编程-实现委托
实现委托 委托是可以存储对方法的引用的对象。在C#中,委托允许您动态地改变类中方法的引用。 考虑咖啡售货机的示例,它配置不同口味的咖啡,例如卡布奇诺咖啡和黑咖啡。在选择所需口味的咖啡时,售货机决定混合各种成分,例如奶粉、咖啡粉、热水、卡布奇诺咖啡粉。所有的材…...
Ubuntu18.04 Qt 实现MQTT
什么是MQTT? 作用是什么(适用场景)? 与其他通讯协议相比,优缺点在那里? 一.安装 MQTT 服务器 使用 EMQ X(开源且可视化管理) 下载 EMQX 下载的是 emqx-5.0.26-ubuntu18.04-…...
【软件测试】学习笔记-不同视角的软件性能与性能指标
本篇文章探讨新的测试主题:性能测试,因为性能测试的专业性很强,所以我会以从0到1的入门者视角,系统性地阐述性能测试的方法以及应用领域,用实例去诠释各种性能指标。 本篇文章站在全局的视角,帮你梳理软件性…...
Spring MVC组件
1.DispatcherServlet前端控制器 用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。 2.HandlerMappin…...
vue文件在<template>中使用多个<el-main>报错(已解决)
目录 1.原理 2. 根据你的需求,自定义每个 组件的内容。你可以在 标签内部插入文本、其他组件、样式等。 3. 根据需要添加样式或其他属性到每个 组件。你可以使用 class、style 或其他属性来自定义每个组件的外观和行为。 4.一个可以运行的总代码如下 5.我的一…...
【PlantUML】- 时序图
写在前面 本篇文章,我们来介绍一下PlantUML的时序图。这个相对类图来讲,比较简单,也不需要布局。读完文章,相信你就能实际操作了。 目录 写在前面一、基本概念二、具体步骤1.环境说明2.元素3.语法4.示例 三、参考资料写在后面系列…...
openai自定义API操作 API (openai.custom):OpenAI API 实现电商平台的智能库存管理
在电商行业中,库存管理是至关重要的环节之一。一个高效的库存管理系统可以确保商品的正常供应,避免缺货或积压现象,从而提高销售效率和客户满意度。然而,传统的库存管理方式往往存在一些问题,如数据不准确、响应不及时…...
宠物服务新篇章:预约小程序带来的变革
随着科技的进步和互联网的普及,小程序已经成为了一种非常受欢迎的应用形式。对于宠物门店来说,开发一个预约小程序可以大大提高客户体验和管理效率。下面是一份宠物门店预约小程序的开发指南。 浏览器搜索乔拓云,登录乔拓云网后台,…...
谷歌最新医学领域LLM大模型:AMIE
2024年1月11日Google 研究院发布最新医疗大模型AMIE:用于诊断医学推理和对话的研究人工智能系统。 文章链接:Articulate Medical Intelligence Explorer (AMIE) giuthub:目前代码未开源 关于大模型之前有过一篇总结:大语言模型(L…...
路由器02_静态路由DHCP
一、静态路由 1、静态路由特点 由管理员手工配置,是单向的,缺乏灵活性 2、默认路由 默认路由是一种比较特殊静态路由,一般用于末节(末梢)网络,直接指定目标为任何地方 二、静态…...
Mysql 递归查询所有子节点,hutool树形结构封装
工作中经常会有像目录,部门的多级结构,记录一下查询自己点的方式,留着复制粘贴 方式1: SELECT* FROMcus_department WHEREFIND_IN_SET( id, pid ) > 0;UNIONSELECTcd.* FROM( SELECT * FROM cus_department WHERE pid IS …...
【代码随想录04】24. 两两交换链表中的节点 19. 删除链表的倒数第 N 个结点 面试题 02.07. 链表相交 142. 环形链表 II
24. 两两交换链表中的节点 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 做题思路 可以设置虚拟头结点cur和画图…...
Pandas实战100例 | 案例 25: 计算相关系数
案例 25: 计算相关系数 知识点讲解 在统计分析中,了解变量之间的关系是非常重要的。相关系数是衡量变量之间线性相关程度的一种方法。Pandas 提供了 corr 方法来计算列之间的相关系数。 相关系数: 相关系数的值范围在 -1 到 1 之间。接近 1 表示正相关࿰…...
vue文本识别“\n“换行问题的解决方式
一、通过 css属性 实现 设置 white-space: pre-wrap; 代码如下: <div style"white-space: pre-wrap;">({含有\n的字符串}}</div> 扩展: white-space属性值: 值描述normal默认。空白会被浏览器忽略。pre空白会被浏…...
【QT-UI】
1.使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …...
MyBatisPlus逆向工程
依赖 <!--Mybatis-plus逆向生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><!--Mybatis-plus逆向生成器的Freema…...
创建ESP32开源WiFi MAC(介质访问控制)层
内置WiFi 内置的 WiFi.h 库将使我们能够轻松使用 ESP32 板的 WiFi 功能。 连接到 Wi-Fi 接入点: #include <WiFi.h>const char* ssid "yourNetworkName"; const char* password "yourNetworkPassword";void setup(){Serial.begin(11…...
LeetCode 2723. 两个 Promise 对象相加
给定两个 promise 对象 promise1 和 promise2,返回一个新的 promise。promise1 和 promise2 都会被解析为一个数字。返回的 Promise 应该解析为这两个数字的和。 示例 1: 输入: promise1 new Promise(resolve > setTimeout(() > res…...
Flutter--常用技术文档
配置 清华大学flutter镜像 export PUB_HOSTED_URLhttps://mirrors.tuna.tsinghua.edu.cn/dart-pub export FLUTTER_STORAGE_BASE_URLhttps://mirrors.tuna.tsinghua.edu.cn/flutter 社区镜象 export PUB_HOSTED_URLhttps://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_UR…...
行分类问题
行分类问题可以应用于多个领域和问题,其中一些示例包括: 文本分类: 在自然语言处理中,可以将文本分为不同的类别,例如情感分析、主题分类等。每个文本可以被视为一个“行”,而分类任务就是对每个行进行分类…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
