C#难点语法讲解之委托---从应用需求开始讲解

一、委托的定义

委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

简单解释:变量好控制,方法不好控制,委托可以把方法变成变量

二、例子解释定义

如果我们有一个数组,里面有10个数据:(数组就是变量的一种)

int[] num = new int[10] {0,1,2,3,4,5,6,7,8,9};

现在,我们想把它们每个都输出一遍,我们可以:

   public void OutPut(){foreach (int item in num){Console.WriteLine(item);}}

那如果我们有十个方法:

 public void Fun0() {Console.WriteLine(0);}public void Fun1(){Console.WriteLine(1);}public void Fun2(){Console.WriteLine(2);}public void Fun3(){Console.WriteLine(3);}public void Fun4(){Console.WriteLine(4);}public void Fun5(){Console.WriteLine(5);}public void Fun6(){Console.WriteLine(6);}public void Fun7(){Console.WriteLine(7);}public void Fun8(){Console.WriteLine(8);}public void Fun9(){Console.WriteLine(9);}

现在,我们想把它们每个都用一遍,我们就得:

    public void OutPut(){Fun0();Fun1();Fun2();Fun3();Fun4();Fun5();Fun6();Fun7();Fun8();Fun9();}

如果,这时候,你觉得还好,那需求如果继续变化:

1.周一希望执行方法2、4、6、8

2.周二想执行方法1、3、5、7

3.周三想执行方法0、1、2、3、4

4.周四想执行方法5、6、7、8、9

5.周五我希望在这10个方法里,随机抽取两个方法执行

就问你难不难受,你要写好几组

如果这时候,他和数组一样,就很好写了(这就是变量比方法好用的地方)

三、把方法做成变量

整数是int

字符串是string

方法是 delegate

四、把一个已经有的方法和delegate联系起来

1.联系一个普通方法

 public void Fun0() {Console.WriteLine(0);}

我们需要让这个委托长得和这个普通的方法一样

public delegate void Apple();public void Fun0() {Console.WriteLine(0);}

这里的格式指的是:括号里有没有参数,有没有返回值

为什么要给委托起名字?

因为你可能建很多委托啊,有参数的,没参数的,需要return的,不需要return的。

例(有参数的):

    //方法public void Fun1(string s){Console.WriteLine(1);}//建立委托(抄方法的格式)public delegate void Apple1(string s);//把委托和方法联系起来public void OutPut(){Apple1 apple1 = Fun1;}

例(有两个参数的):

    //方法public void Fun2(string s,string s1){Console.WriteLine(1);}//建立委托(抄方法的格式)public delegate void Apple2(string s, string s1);//把委托和方法联系起来public void OutPut(){Apple2 apple2 = Fun2;}

例(有返回值的):

不需要参数咱就把参数删了就行,相信大家都是灵活的宝宝~~

    //方法public int Fun3(string s,string s1){Console.WriteLine(1);return 1;     }//建立委托(抄方法的格式)public delegate int Apple3(string s, string s1);//把委托和方法联系起来 public void OutPut(){Apple3 apple2 = Fun3;}

五、委托应用

回到我们最开始的故事,我们用委托,就可以把方法当变量了

(注意,这些方法格式是一样的,都是无返回值,无参数)

方法,还是那10个方法,委托还是那个委托

public delegate void Apples();public void Fun0(){Console.WriteLine(0);}public void Fun1(){Console.WriteLine(1);    }public void Fun2(){Console.WriteLine(2);}public void Fun3(){Console.WriteLine(3);}public void Fun4(){Console.WriteLine(4);}public void Fun5(){Console.WriteLine(5);}public void Fun6(){Console.WriteLine(6);}public void Fun7(){Console.WriteLine(7);}public void Fun8(){Console.WriteLine(8);}public void Fun9(){Console.WriteLine(9);}

我们可以搞个委托数组,把这些方法都放进去 

    public void OutPut(){//委托数组,Apples是之前建立的按Fun方法写的委托Apples[] apples =new Apples[10];apples[0] = Fun0;apples[1] = Fun1;apples[2] = Fun2;apples[3] = Fun3;apples[4] = Fun4;apples[5] = Fun5;apples[6] = Fun6;apples[7] = Fun7;apples[8] = Fun8;apples[9] = Fun9;}

开始用啦!!!!!快乐来了

 public void OutPut(){Apples[] apples =new Apples[10];apples[0] = Fun0;apples[1] = Fun1;apples[2] = Fun2;apples[3] = Fun3;apples[4] = Fun4;apples[5] = Fun5;apples[6] = Fun6;apples[7] = Fun7;apples[8] = Fun8;apples[9] = Fun9;//执行Fun0-4for (int i = 0; i < 5; i++){apples[i]();}//执行Fun5-9for (int i = 5; i < 10; i++){apples[i]();}//执行Fun1-3-5-7-9for (int i = 1; i < 10; i=i+2){apples[i]();}}

就不往多的写了,意思就是这个意思,我们可以把方法当参数了,与此同时,你也可以搞list,也可以在括号里传递委托,等等等等,,,如果有疑问,请写在评论区,我会继续补充修改的~

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

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

相关文章

Spring Security 的身份验证绕过漏洞CVE-2023-34035

文章目录 0.前言漏洞漏洞介绍描述 1.参考文档2.基础介绍2.1 组件简介&#xff1a;2.2 漏洞简介&#xff1a; 3.解决方案3.1. 升级版本 0.前言 背景&#xff1a;公司收到关于 Spring Security 的一个身份验证绕过漏洞的通知&#xff0c;该漏洞被标识为 CVE-2023-34035 漏洞 高 …

java项目之固定资产管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的固定资产管理系统。源码和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

尚硅谷JAVA数据结构与算法--希尔排序

一、希尔排序 也称缩小增量排序&#xff0c;分为交换法和移动法&#xff0c;移动法速度更快。 交换法&#xff1a; package 希尔排序; //交换法 import java.util.Arrays;public class ShellSort {public static void main(String[] args) {int[] arr{7,1,4,6,8,9,5,2,3,10}…

前端架构设计:构建可维护、可扩展的现代Web应用

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 引言 前端架构设计是现…

EndNote21 | 账户同步问题

问题&#xff1a;无法同步&#xff0c;提示如下图所示。 原因&#xff1a;网络问题。 解决方法&#xff1a;国内网络无法实现同步&#xff0c;解决上网问题即可。

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介&#xff1a; Ubuntu是一个linux操作系统&#xff0c;Nginx是一个web服务器软件&#xff0c;ModSecurity是一款开源的web应用防火墙&#xff08;江湖人称“WAF”&#xff09;。 如果上面的概念没有一定的了解&#xff0c;下面的内容其实也能看。就是不好操作。…

设计模式之中介者模式

尽管将一个系统分割成许多对象通常可以增加其可复用性&#xff0c;但是对象间相互连接的激增又会降低其可复用性 大量的连接使得一个对象不可能在没有其他对象的支持下工作&#xff0c;系统表现为一个不可分割的整体&#xff0c;所以&#xff0c;对系统的行为进行任何较大的改…

美创科技入选第二届安徽省网络和数据安全应急技术支撑单位

9月11日&#xff0c;2023年安徽省网络安全宣传周活动在阜阳市正式启动。安徽省委常委、宣传部部长陈舜出席并宣布网安周正式启动。阜阳市委书记刘玉杰、省委宣传部副部长、省委网信办主任张杰华出席并致辞。 开幕式上&#xff0c;省委网信办副主任齐海洋发布第二届安徽省网络和…

[论文阅读] SADGA: Structure-Aware Dual Graph Aggregation Network for Text-to-SQL

“SADGA: Structure-Aware Dual Graph Aggregation Network for Text-to-SQL” 是一篇 text2sql 领域的论文&#xff0c;发布于 NeurIPS 2021。 原文链接&#xff1a;https://arxiv.org/abs/2111.00653 项目代码链接&#xff1a;https://github.com/DMIRLAB-Group/SADGA 总体…

搜好货API接口解析,实现获得搜好货商品详情

要解析搜好货API接口并实现获取搜好货商品详情&#xff0c;你需要按照以下步骤进行操作&#xff1a; 了解搜好货开放平台&#xff1a;访问搜好货开放平台官网&#xff0c;找到API接口相关的开发者文档、指南等信息。注册开发者账号&#xff1a;在搜好货开放平台上注册一个开发…

C++之vector迭代器函数begin、end、rebegin、rend、cbegin、cend、crbegin、crend总结(二百零一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

文心一言 VS 讯飞星火 VS chatgpt (93)-- 算法导论9.2 1题

一、用go语言&#xff0c;证明&#xff1a;在 RANDOMIZED-SELECT 中&#xff0c;对长度为0的数组&#xff0c;不会进行递归调用。 文心一言&#xff1a; 在 Go 语言中&#xff0c;我们可以通过实现一个函数来检查数组的长度&#xff0c;如果长度为0&#xff0c;则不进行递归调…

vue3中的吸顶导航交互实现 | VueUse插件

目的&#xff1a;浏览器上下滚动时&#xff0c;若距离顶部的滚动距离大于78px&#xff0c;吸顶导航显示&#xff0c;小于78px隐藏。使用vueuse插件中的useScroll方法​​​​​​​和动态类名控制进行实现 1. 安装 npm i vueuse/core 2. 获得滚动距离 项目中导入&#xff0…

财富潮涌:银行发展绿色经济创新路径

在《玩转金融新“绿”潮&#xff0c;银行纷纷亮大招》内容中&#xff0c;我们带大家了解了商业银行有关绿色信贷产品、绿色债券产品及绿色投资的内容。今天&#xff0c;我们将继续带大家了解商业银行绿色金融实践路径中关于绿色财富、绿色服务和绿色运营的分析。 在绿色金融实…

文件路径中的/,\的区别和文件路径的常见用法

/是Unix和类Unix系统上的路径分隔符.现代Windows通常可以同时使用\和/交换文件路径,但微软\几十年来一直主张使用路径分隔符. 关于文件路径的常用方法再学习一下&#xff1a; "./"&#xff1a;代表目前所在的目录 "../"&#xff1a;代表上一层目录 以&q…

线性代数的本质(一)——向量空间

文章目录 向量空间向量及其性质基与维数向量的坐标运算 《线性代数的本质》 - 3blue1brown 高中数学A版选修4-2 矩阵与变换 《线性代数及其应用》(第五版) 《高等代数简明教程》- 蓝以中 向量空间 In the beginning Grant created the space. And Grant said, Let there be vec…

Rn视图生成图片并保存到相册

该功能依赖两个组件 完整代码 yarn add react-native-view-shot // 视图生成图片 yarn add expo-media-library // 保存图片import { useState, useRef } from react import ViewShot from "react-native-view-shot" import { View, Text, Button, Image, StyleSh…

pdf文档怎么压缩小一点?文件方法在这里

在日常工作和生活中&#xff0c;我们经常会遇到需要上传或者发送pdf文档的情况。但是&#xff0c;有时候pdf文档的大小超出了限制&#xff0c;需要我们对其进行压缩。那么&#xff0c;如何将pdf文档压缩得更小一点呢&#xff1f;下面&#xff0c;我将介绍三种方法&#xff0c;让…

堆与栈的区别

OVERVIEW 栈与堆的区别一、程序内存分区中的堆与栈1.栈2.堆3.堆&栈 二、数据结构中的堆与栈1.栈2.堆 三、堆的深入1.堆插入2.堆删除&#xff1a;3.堆建立&#xff1a;4.堆排序&#xff1a;5.堆实现优先队列&#xff1a;6.堆与栈的相关练习 栈与堆的区别 自整理&#xff0c;…

【Cocos Creator 3.5实现赛车游戏】10.实现汽车节点的运动逻辑

转载知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff0c;知识变现的工具 项目地址&#xff1a;赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码&#xff0c;基于Cocos Creator 3.5版本实现 上一节的学习后&#xff0c;您已经完成了对汽车节点的控制逻…