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

C# 语法进阶 委托

1.委托

委托是一个引用类型,其实他是一个类,保存方法的指针
(指针:保存一个变量的地址)他指向一个方法,当我们调用委托的时候这个方法就立即被执行

关键字:delegate

在这里插入图片描述
运行结果:
在这里插入图片描述
思考:
能直接通过方法名调用方法,为什么需要使用委托呢
在这里插入图片描述
在这里插入图片描述

为什么要有委托

1.新建Vip 类
在这里插入图片描述
2,使用委托
(1)不适用委托的情况
在这里插入图片描述
运行结果:
在这里插入图片描述
(2)想把价格判断独立出来,考虑别人可能需要动态修改价格
一。修改Learn类
在这里插入图片描述
二、定义一个供委托使用的方法
在这里插入图片描述

三、使用
在这里插入图片描述
四、运行结果
在这里插入图片描述
委托让用户可以自定义方法内部的实现,给用户更多自由

若修改为5999,则只需要添加新的扩展类
在这里插入图片描述
修改委托中的方法。
在这里插入图片描述
达到不修改源码,横向扩展的目的。

委托与冒泡排序

泛型: 他就是把类型做到了通用
反射:能找出我们DLL文件里面得各种信息
特性:特性是让我们的类,方法,属性,参数 之类的。在不修改源码的情况下,产生了更多功能,或者其他功能(打一个标签就生成了新的功能,本质他其实就是AOP的另一种 实现方式。)
委托:指向方法的指针。通过委托可以调用方法。

案例

冒泡排序:
在这里插入图片描述
调用:
在这里插入图片描述

运行结果:
在这里插入图片描述

若此时需要改为降序排序,就需要修改判断条件

新建枚举:
在这里插入图片描述
修改方法:
在这里插入图片描述
此种方法,在类型特别多的情况下 并不适用

方式二:使用委托改进该方式。
新建DelegateSort 类,放入冒泡排序方法
在这里插入图片描述
写一个方法达到 传入表达式的作用
在这里插入图片描述

修改原方法
首先修改传入参数,添加委托类型
在这里插入图片描述
然后修改判断条件
在这里插入图片描述
调用:
在这里插入图片描述
结果:
在这里插入图片描述
此时修改排序方式,只需要新添方法
在这里插入图片描述
调用委托就相当于调用方法,可以把逻辑抽离出来

泛型委托

(1) 构造一个泛型委托
在这里插入图片描述
调用:
在这里插入图片描述
运行结果:
在这里插入图片描述
因为是泛型委托,所以可以达到通用效果
在这里插入图片描述
运行结果:
在这里插入图片描述
实际这种方式,官方已经定义好了 换成官方版本
在这里插入图片描述

带返回值的泛型委托:
首先定义一个带返回值的方法
在这里插入图片描述

在这里插入图片描述

最多可以支持16个参数
在这里插入图片描述
在这里插入图片描述

多播委托

创建多播委托类:
在这里插入图片描述
在这里插入图片描述
编译:
在这里插入图片描述
查看反编译代码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【1】每一个委托都是继承自MulticastDelegate ,也就是每个委托都是多播委托。
【2】带返回值的多播委托只返回最后一个方法的值
【3】多播委托可以用加减号来操作方法的增加或者减少
【4】给委托传递相同的方式时, 生成的委托实列也是相同的(也就是同一个委托)

简写方式:
在这里插入图片描述
多播委托:
新建几个方法
在这里插入图片描述
原版方法:
在这里插入图片描述
方法调用:
在这里插入图片描述
调用结果:
在这里插入图片描述

减少一个方法:
在这里插入图片描述

调用结果:
在这里插入图片描述
简写方式:
在这里插入图片描述
运行结果:
在这里插入图片描述
通过循环找出所有的委托链
在这里插入图片描述
调用结果与上述方法相同

使用lamada表达式方式:
在这里插入图片描述
运行结果:

在这里插入图片描述
使用lamada表达式的话 编译后默认都给方法取了一个新名称,所以无法减去func3
使用方法名的方式:
在这里插入图片描述
调用结果:
在这里插入图片描述

委托事件

事件:委托的安全版本
【1】 在定义事件类的外部,他是不能使用=号来操作,只能使用+=
【2】 在定义事件类的外部不能调用事件,另外事件就是在委托的前面增加一个event 关键字

在这里插入图片描述
写在类中,并新建类,声明两个方法
在这里插入图片描述
事件在哪个类中声明 就在哪个类中调用
在这里插入图片描述

修改:
在这里插入图片描述
调用
在这里插入图片描述
运行结果:
在这里插入图片描述

WinForm 里的事件

添加一个新项目:
在这里插入图片描述

添加一个Windows 窗体应用
在这里插入图片描述
在这里插入图片描述
首先创建一个button
在这里插入图片描述
在这里插入图片描述
双击进入该事件方法
在这里插入图片描述
在这里插入图片描述

导航到click的定义,观察事件是如何定义的
在这里插入图片描述
查看他的委托定义:
在这里插入图片描述

在这里插入图片描述

在private System.Windows.Forms.Button button1:对象里定义并且调用了事件
对象的定义和调用在同一个类中。
在这里插入图片描述
查看Button
在这里插入图片描述

F12 查看OnClick方法
在此处调用了事件
在这里插入图片描述

查看EventArgs 参数:
在这里插入图片描述
EventArgs事件参数的基类

测试:
在这里插入图片描述
在这里插入图片描述
运行结果:
点一个按钮会出现三个框
在这里插入图片描述
实际场景:
比如在付款前,付款后需要进行什么操作

自定义标准事件

相关文章:

C# 语法进阶 委托

1.委托 委托是一个引用类型,其实他是一个类,保存方法的指针 (指针:保存一个变量的地址)他指向一个方法,当我们调用委托的时候这个方法就立即被执行 关键字:delegate 运行结果: 思…...

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前文链接: ​​开源可观测性平台Signoz系列(一)【开篇】​​ ​​开源可观测性平台Signoz&…...

【嵌入式开发 Linux 常用命令系列 4.2 -- git .gitignore 使用详细介绍】

文章目录 .gitignore 使用详细介绍.gitignore 文件的位置.gitignore 语法规则使用示例注意事项 .gitignore 使用详细介绍 .gitignore 文件是一个特殊的文本文件,它告诉 Git 哪些文件或目录是可以被忽略的,即不应该被纳入版本控制系统。这主要用于避免一…...

【熔断限流组件resilience4j和hystrix】

文章目录 🔊博主介绍🥤本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟…...

微服务雪崩问题及解决方案

雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。 如果服务提供者A发生了故障,当前的应用的部分业务…...

008、所有权

所有权可以说是Rust中最为独特的一个功能了。正是所有权概念和相关工具的引入,Rust才能够在没有垃圾回收机制的前提下保障内存安全。 因此,正确地了解所有权概念及其在Rust中的实现方式,对于所有Rust开发者来讲都是十分重要的。在本文中&…...

千里马2023年终总结-android framework实战

背景: hi粉丝朋友们: 2023年马上就过去了,很多学员朋友也都希望马哥这边写个年终总结,因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发,差点都忘记了这个事情了,今天特别花时间来写个bl…...

vue3中pinia的使用及持久化(详细解释)

解释一下pinia: Pinia是一个基于Vue3的状态管理库,它提供了类似Vuex的功能,但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中,并且将store的行为和数据暴露为可响应的API,从而实现数据&#…...

安装 yarn、pnpm、功能比较

安装 yarn 官网:https://classic.yarnpkg.com/ 快速、可靠和安全的依赖性管理。 Yarn是您代码的软件包管理器。它允许您使用和共享(例如JavaScript)与来自世界各地的其他开发人员一起编写代码。Yarn是一个新的快速安全可信赖的可以替代 NP…...

计算机专业个人简历范文(8篇)

HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 如果你不懂得如何在简历上展示自己,或者觉得怎么改简历都不出彩,那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…...

几个实用网站

论文短语:https://www.phrasebank.manchester.ac.uk/ 翻译:https://www.deepl.com/en/translator 润色:https://quillbot.com/ 榜单:www.paperwithcode.com ****NLP民工的乐园: 几乎最全的中文NLP资源库:****https…...

Pycharm 切换interpreter---python的环境和第三方库问题

这篇回答两个问题: 1.为什么在 pycharm中打开新的project,切换interpreter 之后发现自己之前装的库消失了? 2.为什么 interpreter 切换到python3.8了, terminal 还是在 3.9?? 问题的关键:搞懂什…...

TP-LINK 路由器忘记密码 - 恢复出厂设置

TP-LINK 路由器忘记密码 - 恢复出厂设置 1. 恢复出厂设置2. 创建管理员密码3. 上网设置4. 无线设置5. TP-LINK ID6. 网络状态References 1. 恢复出厂设置 在设备通电的情况下,按住路由器背面的 Reset 按钮直到所有指示灯同时亮起后松开。 2. 创建管理员密码 3. 上网…...

关闭 Elasticsearch 集群的安全性设置

关闭 Elasticsearch 集群的安全性设置,特别是如果您正在使用 X-Pack,涉及到修改 Elasticsearch 的配置。以下是一般步骤,但请注意,这可能会使您的 Elasticsearch 集群面临安全风险,因此建议仅在开发或测试环境中执行此…...

[技术分享]一招解决 MySQL 中 DDL 被阻塞的问题

爱可生开源社区. 爱可生开源社区,提供稳定的MySQL企业级开源工具及服务,每年1024开源一款优良组件,并持续运营维护。 背景 之前碰到客户咨询定位DDL阻塞的相关问题,整理了一下方法,如何解决DDL被阻塞的问题。下面,就这个问题,整理了一下思路: 怎么判断一个 DDL 是…...

Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…...

自动化测试系列 之 Python单元测试框架unittest

一、概述 什么是单元测试 单元测试是一种软件测试方法,是测试最小的可测试单元,通常是一个函数或一个方法。 在软件开发过程中,单元测试作为一项重要的测试方法被广泛应用。 为什么需要单元测试 单元测试是软件开发中重要的一环&#xf…...

C语言朴素算法

#include <stdio.h> #include <string.h>// 朴素算法&#xff0c;用于字符串匹配 void naiveMatch(char* text, char* pattern) {int textLength strlen(text); // 计算文本串长度int patternLength strlen(pattern); // 计算模式串长度for …...

【力扣题解】P501-二叉搜索树中的众数-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P501-二叉搜索树中的众数-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x1f…...

Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...