什么是委托

可以认为委托是持有一个或多个方法的对象。当然,一般情况下你不会想要“执行”一个对
象,但委托与典型的对象不同。可以执行委托,这时委托会执行它所“持有"的方法。

本章将揭示创建和使用委托的语法和语义。在本章后面,你将看到如何使用委托将可执行的
代码从一个方法传递到另一个方法,以及为什么这样做是非常有用的。
我们将从下面的示例代码开始。如果此时你有些东西弄不明白,不必担心,本章后面会介绍
委托的细节。

  • 代码开始部分声明了一个委托类型MyDel(没错,是委托类型不是委托对象。我们很快就
    会介绍这一点)。
  • Program类声明了3个方法:PrintLow、PrintHigh和Main。接下来要创建的委托对象将
    持有printLow或PrintHigh方法,但到底使用哪个要到运行时才能确定。
  • Main声明了一个局部变量del,它将持有一个MyDel类型的委托对象的引用。这并不会创
    建对象,只是创建持有委托对象引用的变量,在几行之后便会创建这个委托对象,并将
    其赋值给这个变量。
  • Main创建了一个Random类的对象,Random是一个随机数生成器类。接着程序调用该对象
    的Next方法,将99作为方法的输入参数。这会返回一个介于0到99之间的随机整数,
    并将这个值保存在局部变量randomvalue中。
  • 下面一行检查返回并存储的随机值是否小于50。(注意,我们使用三元条件运算符来返回
    两个委托之一。)
    • 如果该值小于50,就创建一个MyDel委托对象并初始化,让它持有PrintLow方法的引用。
    • 否则,就创建一个持有PrintHigh方法的引用的MyDel委托对象。
  • 最后,Main执行委托对象del,这将执行它持有的方法(或P1intHight)。

说明 如果你有C++背景,理解委托最快的方法是把它看成一个类型安全的、面向对象的C++
函数指针。

delegate void MyDel(int value);    //声明委托类型class Program
{void PrintLow(int value){Console.WriteLine($"{value}-Low Value");}void PrintHigh(int value){Console.WriteLine($"{value} - High Value");}static void Main(){Program program=new Program();MyDel del;     //声明委托变量//创建随机整数生产器对象,并得到0到99之间的一个随机数Random rand=new Random();int randomValue=rand.Next(99);//创建一个包含PrintLow或PrintHigh的委托对象并将其赋值给del变量del=randomValue<50?new MyDel(program.PrintLow):new MyDel(program.PrintHigh);del(randomValue)//执行委托}
}

由于我们使用了随机数生成器,程序在不同的运行过程中会产生不同的值。程序运行可能产
生的结果如下:

28 -Low Value

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

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

相关文章

iTwin briefcase, checkpoint ,standalone

在 iTwin.js 中&#xff0c;briefcase 和 checkpoint 都是 IModel 的不同连接类型&#xff0c;但它们的用途和特性不同&#xff1a; Briefcase 用途&#xff1a;用于本地编辑和同步。通常是用户从 iModelHub 检出&#xff08;Check-out&#xff09;后在本地生成的可写副本。特…

媒体AI关键技术研究

一、引言 随着人工智能技术的迅猛发展&#xff0c;媒体行业正经历前所未有的变革。AI技术不仅重塑了内容生产和传播模式&#xff0c;更为媒体创意发展提供了全新可能。在数字化、移动化和信息爆炸的大背景下&#xff0c;传统媒体面临巨大挑战&#xff0c;而AI技术为行业带来了…

Cargo 与 Rust 项目

一、Rust 项目&#xff1a;现代化的系统编程单元 Rust 项目 是用 Rust 语言编写的软件工程单元&#xff0c;具有以下核心特征&#xff1a; 核心组件&#xff1a; src/ 目录&#xff1a;存放 Rust 源代码&#xff08;.rs 文件&#xff09; Cargo.toml&#xff1a;项目清单文件…

uni-app总结6-配合iOS App项目开发apple watch app

假设你已经用uni-app开发好了一个iOS端的app,现在想要开发一个配套的apple watch app。改怎么去开发呢?是不是一头雾水,这篇文章就会介绍一些apple watch app开发的知识以及如何在uni-app开发的iOS app基础上去开发配套的watch app。 一、apple watch 开发知识 apple watc…

神经网络的本质 逻辑回归 python的动态展示

神经网络的本质 逻辑回归 python的动态展示 逻辑回归运行图相关代码什么是逻辑回归和ai的关系逻辑回归公式流程与实际案例解析**一、逻辑回归的数学公式流程**1. **线性组合阶段**2. **激活函数&#xff08;Sigmoid&#xff09;**3. **概率预测与决策**4. **交叉熵损失函数**5.…

sql server中的with 锁各种区别

&#x1f4d8; SQL Server 常用 WITH (Hint) 用法与组合场景对照表 Hint 组合作用说明常见用途是否阻塞他人是否读脏数据备注WITH (NOLOCK)不加共享锁&#xff0c;允许读取未提交数据报表导出、大数据分页❌✅等价于 READ UNCOMMITTED&#xff0c;脏读风险高WITH (HOLDLOCK)保持…

KES数据库部署工具使用

一、启动部署工具 Windows系统 #命令行 ${安装目录}/ClientTools/guitools/DeployTools/deploy.exeLinux系统 #命令行 [rootnode ~]# ${安装目录}/ClientTools/guitools/DeployTools/deploy二、环境配置 1.硬件要求 #都是最小配置 CPU&#xff1a;主流32或64位 内存&#…

TB62211FNG是一款采用时钟输入控制的PWM斩波器的两相双极步进电机驱动器

TB62211FNG是一款采用时钟输入控制的PWM斩波器的两相双极步进电机驱动器。该器件采用BiCD工艺制造&#xff0c;额定电压为40伏/1.0安培。片上电压调节器允许使用单一VM电源控制步进电机。 特点&#xff1a; • 双极性步进电机驱动器 • 脉冲宽度调制&#xff08;PWM&#xf…

uni-app项目实战笔记24--uniapp实现图片保存到手机相册

前提条件&#xff1a;微信小程序要想实现保存图片到本地相册需要到微信公众平台--小程序--开发管理中配置服务器域名中的downloadFile合法域名&#xff1a; \uniapp提供了saveImageToPhotosAlbum API实现保存的图片到本地相册。下面是它的配置参数&#xff1a; 参数名类型必填…

面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例

在 TypeScript 里&#xff0c;要定义一个入参为any类型、返回值为string类型的函数&#xff0c;可参考下面几种实现方式&#xff1a; 1. 基础实现 直接把入参转换为字符串返回。 function anyToString(input: any): string {return String(input); // 使用String()进行类型转…

TensorFlow深度学习实战——Transformer模型评价指标

TensorFlow深度学习实战——Transformer模型评价指标 0. 前言1. 质量1.1 GLUE1.2 SuperGLUE1.3 SQuAD1.4 RACE1.5 NLP-progress2. 参数规模3. 服务成本相关链接0. 前言 可以使用多种类型的指标评估 Transformer 模型。在本节中,我们将学习一些用于评估 Transformer 的关键因素…

linux内核学习(一)---内核社区介绍及补丁提交

目录 一、引言 二、内核源码 三、内核社区 ------>3.1、社区的组织架构 ------>3.2、内核社区的工作方式 ------>3.3、内核社区核心网站 ------------>3.3.1、Linux Kernel 官网 ------------>3.3.2、Linux Kernel 邮件列表(LKML) ------------>3.3…

轻量级web开发框架之Flask web开发框架学习:get请求数据的发送

Flask是一个使用 Python 编写的轻量级 Web 应用框架&#xff0c;简介灵活&#xff0c;可快速构建开发框架。 协作流程示例 客户端请求 → Web服务器&#xff08;Nginx&#xff09; → WSGI服务器&#xff08;Gunicorn/uWSGI&#xff09;↓WSGI协议传递请求数据&#xff08;env…

Vue 3 异步三剑客:Suspense、async setup() 和 await 的戏剧性关系,白屏的解决

文章目录 &#x1f3ad; Vue 3 异步三剑客&#xff1a;Suspense、async setup() 和 await 的戏剧性关系&#xff0c;白屏的解决&#x1f3ac; 角色介绍&#x1f3ad; 正常演出流程&#xff08;有 Suspense 时&#xff09;&#x1f4a5; 灾难场景&#xff08;缺少 Suspense 时&a…

【JavaScript-Day 48】告别 Ajax,拥抱现代网络请求:Fetch API 完全指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

BUUCTF在线评测-练习场-WebCTF习题[极客大挑战 2019]Knife1-flag获取、解析

解题思路 这题没有什么解题思路&#xff0c;打开靶场&#xff0c;标题是白给的shell 页面显示了 eval($_POST["Syc"]); 这是php webshell命令&#xff0c;密码为Syc&#xff0c;可直接通过该命令连接&#xff0c;根据标题提示&#xff0c;直接尝试用蚁剑连接 连接成…

Qt—(Qt线程,Qt进程,,QT与sqlite数据库)

一 Qt线程与进程概述 线程与进程对比 特性线程 (QThread)进程 (QProcess)内存空间共享父进程内存独立内存空间创建开销小 (几MB)大 (几十MB)通信方式共享内存/信号槽管道/套接字/文件崩溃影响导致整个进程终止仅自身终止适用场景高并发任务、计算密集型隔离第三方应用、安全需求…

计算机视觉阶段一:CV入门基础

目录 学习目标&#xff1a; 一、核心知识点 二、实用工具推荐 三、学习内容与步骤 1.环境搭建 2.图像获取与显示 3 图像基础处理 4 图像几何变换 5 图像像素操作 四、实战任务建议 实战 1&#xff1a;图像加载 显示 保存 实战 2&#xff1a;灰度图 边缘检测 图…

新增MCP接入和AutoAgent,汉得灵猿AI中台1.6版正式发布!

汉得灵猿&#xff08;大圣&#xff09;AI中台1.6版本&#xff0c;经过数月迭代&#xff0c;现已正式发布&#xff01; 新版本最被期待的新功能&#xff0c;无疑是4月份预告的MCP接入&#xff0c;而令人同样激动的另一项新功能&#xff0c;则是AutoAgent动态规划智能体。除了两…

总结汇报思路

一、明确汇报目标 受众需求&#xff1a;领导/客户/团队最关心什么&#xff1f;&#xff08;结果&#xff1f;问题&#xff1f;下一步计划&#xff1f;&#xff09; 核心目的&#xff1a;展示成果&#xff1f;争取资源&#xff1f;总结经验&#xff1f;解决问题&#xff1f; 时…