c# 学习笔记 - 委托(Delegate)

文章目录

    • 1. 委托
      • 1.1 委托概述
      • 1.2 委托使用
      • 1.3 委托的传播
    • 2. 匿名方法
      • 2.1 匿名方法概述
      • 2.2 匿名方法

1. 委托

1.1 委托概述

  委托简介
在这里插入图片描述

  1. 委托就是对方法的引用,可以理解为例如整型变量的容器可以存储整形数据,委托就是某种方法的容器,可以用来存储这一类的方法。
// 声明一个public访问修饰符的 (具有输入字符串类型 + 返回整形数据类型) 的委托
public delegate int MyDelegate(string s); // 委托的模板
  1. 委托分为两步,第一步需要声明这种委托(即定义此类委托是存储什么样子的方法的容器),当我们声明完成委托就相当于拥有了这个容器的模板,其第二步就是实例化委托,就是相当于我们往这个容器当中加入我们想要的方法完成其实例化。
static int way1(string s){ // 定义符合委托模板的方法Console.WriteLine("way1: 传入的字符串为: " + s + ", 随后我即将返回整形数字1");return 1;
}MyDelegate m1; // 通过委托模板实例化委托的容器
m1 = way1; // 往这个委托的容器当中放入方法
MyDelegate m1 = new MyDelegate(way1); // 等效于上述两个步骤之和

1.2 委托使用

using System;namespace DelegateAppl {class TestDelegate {// 声明一个public访问修饰符的 (具有输入字符串类型 + 返回整形数据类型) 的委托模板public delegate int MyDelegate(string s);static int way1(string s){Console.WriteLine("way1: 传入的字符串为: " + s + ", 随后我即将返回整形数字1");return 1;}static void Main(){MyDelegate m1; // 通过委托模板获取委托的容器m1 = way1; // 往这个委托的容器当中放入方法m1("hi.."); // way1: 传入的字符串为: hi.., 随后我即将返回整形数字1}}
}

1.3 委托的传播

在这里插入图片描述

  1. 简而言之就是委托不仅仅可以存储一个方法,它可以按顺序存储多个方法(注意添加的顺序就是委托内部方法的执行顺序)
using System;namespace DelegateAppl {class TestDelegate {public delegate int MyDelegate(string s);static int way1(string s){Console.WriteLine("way1: 传入的字符串为: " + s + ", 随后我即将返回整形数字1");return 1;}static int way2(string s) {Console.WriteLine("way2: 传入的字符串为: " + s + ", 随后我即将返回整形数字2");return 2;}static void Main(){MyDelegate m1; m1 = way1;m1 += way2; // 或者可以先实例化一个新的MyDelegate m2 = way2; 再用 m1 += m2; m1("hi.."); }}
}
/*
way1: 传入的字符串为: hi.., 随后我即将返回整形数字1
way2: 传入的字符串为: hi.., 随后我即将返回整形数字2*/

2. 匿名方法

2.1 匿名方法概述

  简要说明
在这里插入图片描述

  1. 之前我们写委托的时候需要首先声明一个方法,再把这个方法名字给到委托对象去使用.
  2. 匿名方法就是省去方法名字,直接将这个方法的内部操作直接给委托对象(建议当此方法只需要引用一次的时候去使用,因为这个方法是没有方法名)
public delegate int MyDelegate(string s);
MyDelegate m1 = delegate (string s) { // 匿名方法(省去方法的名字)Console.WriteLine(s);return 3;
};

2.2 匿名方法

using System;namespace DelegateAppl {class TestDelegate {public delegate int MyDelegate(string s);static void Main(){MyDelegate m1 = delegate (string s) {Console.WriteLine(s);return 3;};int num = m1("hello world.....");Console.WriteLine(num);}}
}
/*
hello world.....
3*/

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

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

相关文章

数据库基础知识1

关系模型的程序员不需熟悉数据库的存取路径 在3层模式结构中,___I___是数据库的核心和关键,___Ⅱ___通常是模式的子集,数据库模式的描述提供给用户,____Ⅲ__的描述存储在硬盘上。Ⅰ.模式Ⅱ. 外模式Ⅲ. 内模式 数据库中,数据的物理独立性是指用户的应用程序与存储在磁盘上数据库…

D6208双向直流马达驱动芯片 用于IPC产品,可兼容BA6208,噪声低 ,工作电源电压范围宽。

D6208 是一块单片双向马达驱动电路,它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动,功率输出部分根据逻辑控制能提供100mA(典型值&a…

迅腾文化观察:从“占位”到“心智”,从“借势”到“锁定”—— 高增长市场的企业战略之道

迅腾文化观察:从“占位”到“心智”,从“借势”到“锁定”—— 高增长市场的企业战略之道 在当今世界,市场环境瞬息万变,企业若想在激烈的市场竞争中立足并持续发展,必须不断地调整和优化自身的战略。在迅腾文化观察中…

electron进程通信之预加载脚本和渲染进程对主进程通信

主进程和预加载脚本通信 主进程 mian,js 和预加载脚本preload.js,在主进程中创建预加载脚本, const createWindow () > {// Create the browser window.const mainWindow new BrowserWindow({width: 300,height: 300,// 指定预加载脚本webPreferences: {preload: path.j…

web3 : blockscout剖析

Blockscout 是第一个功能齐全的开源区块链浏览器,可供任何以太坊虚拟机 (EVM) 链使用。项目方可以下载并使用Blockscout作为其链的浏览器,用户可以轻松验证交易、余额、区块确认、智能合约和其他记录。 目录 Blockscout可以做什么主要特征blockscoutDocker容器组件Postgres 1…

队列的数据结构实验报告

实验目的: 1、理解队列数据结构的概念和特点。 2、熟悉队列的应用场景和算法实现。 二、实验内容(实验题目与说明) 实现了一个循环队列,具有功能: 初始化队列。判断队列是否为空。判断队列是否已满。入队。出队。…

CSS基本知识

文章目录 1. CSS 是什么2. 基本语法规范3. 引入方式3.1 内部样式表3.2 行内样式表3.3 外部样式 4. 选择器4.1 选择器的功能4.2 选择器的种类4.3 基础选择器4.3.1 标签选择器4.3.2 类选择器4.3.3 id 选择器4.3.4 通配符选择器 4.4 复合选择器4.4.1 后代选择器4.4.2 伪类选择器 5…

【fiddler】fiddler抓包工具的使用

前言:我们可以通过fiddler软件,捕获到http请求,并修改请求参数 修改返回内容 fiddler下载,官网如下图 启动fiddler软件,点击file 选择 Capture Traffic 修改入参 (我们以谷歌浏览器发起请求为例) 此时会出现一个向上的箭头,点击…

Linux第8步_USB设置

学习完设置“虚拟机的电源”后,接着学习通过鼠标点击操作U盘,目的是了解USB设置。 1、在桌面,双击“VMware Workstation Pro”图标,得到下图: 2、点击“编辑虚拟机”,得到下图: 只要点击编辑虚…

Rockchip平台双屏异显功能实现(基于Android13)

Rockchip平台双屏异显功能实现(基于Android13) 1. 异显实现方案 Rockchip SDK平台支持两种不同的异显方案:Android Presentation和Android Activity指定屏幕启动。 使用Android Presentation方案,需要在APP开发中调用相应接口以使指定视图&#xff08…

【软件测试】2024年准备中/高级测试岗技术面试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件测试基础知…

建设数字工厂管理系统解决方案需要哪些技术

随着科技的快速发展,数字化转型已成为工厂提升生产效率、降低成本、增强竞争力的关键。数字工厂管理系统作为这一转型的核心,集成了各种先进的技术,以确保工厂运行的流畅和高效。本文将深入探讨建设数字工厂管理系统解决方案所需的关键技术。…

利用Fastcgi+PHP-FPM非授权访问实现代码执行

目录 Fastcgi Record Fastcgi Type PHP-FPM(FastCGI进程管理器) Nginx(IIS7)解析漏洞 security.limit_extensions配置 漏洞演示 今天要和大家分享的是利用Fastcgi和PHP_FPM实现未授权访问实现代码执行,首先我们需…

element-ui组件DatePicker日期选择器移动端兼容

element-ui组件DatePicker日期选择器移动端兼容 css /** 移动端展示 **/ media screen and (max-width: 500px) {.el-picker-panel__sidebar {width: 100%;}.el-picker-panel {width: 400px!important;}.el-picker-panel__content {width: 100%;}.el-picker-panel__body{marg…

初识MySQL

一、什么是数据库 数据库(Database,简称DB):长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。 数据库的作用: 可以结构化存储大量的数据,方便检索和访问…

U盘如何设置密码?U盘数据该怎么加密?

U盘等移动储存设备可以存储很多重要文件,方便我们随时使用。为了避免数据泄露,我们需要加密保护U盘数据。那么,U盘数据该怎么加密呢?下面我们就来了解一下。 U盘数据加密保护的必要性 目前,大多数的U盘并不具备数据加…

rhino犀牛怎么导入和调整背景图?

rhino犀牛怎么导入和调整背景图?Rhino建模过程中经常要用到背景图,为了更加方便快捷,我们会直接导入一些图片来当做背景,那么Rhino犀牛如何导入和调整背景图呢,让我们一起来看看吧 打开犀牛软件,进入操作界…

oracle用户密码过期导致cron失败

有客户反馈,有个测试环境很久不做自动备份。登录环境查看,发现oracle用户过期导致,如下 [roothydb ~]# su - oracle Last login: Wed Jan 3 10:19:40 CST 2024 on pts/0 orcl:/home/oraclehydb> crontab -l You (oracle) are not allow…

分布式数据之复制(Replication)

1.简介 1.1简介——使用复制的目的 在分布式系统中,数据通常需要被分散在多台机器上,主要为了达到以下目的: 扩展性,数据量因读写负载巨大,一台机器无法承载,数据分散在多台机器 上可以有效地进行负载均衡…

圣诞节来临,如何用海外云手机给亚马逊店铺引流?

马上就要到圣诞节了,这是一年中冲刺销售量的最后一个好机会,对所有亚马逊卖家都十分重要。而无论是亚马逊新手卖家还是老卖家,要想在激烈的竞争中取胜,仅仅靠产品本身是不现实的,通过测评和社媒引流获取更多曝光和流量…