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,一经查实,立即删除!

相关文章

Future、CompletionService、CompletableFuture介绍与对比

目录 Future1、基本介绍2、按照提交任务的顺序获取执行结果 CompletionService1、介绍2、按照任务完成的先后顺序获取结果 CompletableFuture1、介绍2、CompletableFuture怎么非阻塞的获取任务结果 Future 1、基本介绍 Future是JDK1.5 提供的接口,是用来以阻塞的方…

python每日一题:连续子数组的最大和

这是一道关于动态规划的算法题: 题目描述: 给定一个整数数组 nums,请找出该数组中连续子数组的最大和,并返回这个最大和。 示例: 输入:[-2, 1, -3, 4, -1, 2, 1, -5, 4] 输出:6 解释&#xff…

如何用Rust编程访问未知结构的json串?

如何用Rust访问未知结构的JSON串,并包含对数组的访问?以下是一个简单的示例: use serde_json::{Value};fn main() {let json_str r#"{"name":"John","age":30,"city":"New York",&q…

数据库基础知识1

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

PHP篇——html+php实现表单提交的一个简单例子

html&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>表单示例</title> </head> <body><!-- 创建表单 --><form action"form.php" method"po…

Rust:如何判断位置结构的JSON串的成员的数据类型

如何判断位置结构的JSON串的成员的数据类型&#xff0c;给一个Rust的例子&#xff0c;其中包含对数组的判断&#xff1f; 在Rust中&#xff0c;你可以使用serde_json库来处理JSON数据&#xff0c;并通过serde_json::Value类型的方法来判断JSON串中成员的数据类型。以下是一个示…

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

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

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

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

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…

二刷Laravel 教程(优化页面)总结Ⅱ

一、样式美化 Bootstrap 1&#xff09;Laravel 项目中使用 Bootstrap 前端框架&#xff0c;需要先执行以下命令&#xff1a; composer require laravel/ui:3.4.5 --dev composer require 是用来安装扩展包使用的命令。 参数 --dev 是指定此扩展包只在开发环境中使用。 2&am…

队列的数据结构实验报告

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

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抓包工具的使用

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

Linux第8步_USB设置

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

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

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

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

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

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

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

python深度拷贝

在Python中&#xff0c;可以使用copy.deepcopy()函数来进行深度拷贝。 深度拷贝会递归地将所有子对象都复制到一个新的对象中。这意味着即使原始对象包含其他对象&#xff0c;也会将它们完全拷贝到新的对象中。 下面是一个使用copy.deepcopy()函数进行深度拷贝的示例&#xf…

DS|树结构及应用

题目一&#xff1a;DS树 -- 树的先根遍历&#xff08;双亲转先序&#xff09; 题目描述&#xff1a; 给出一棵树的双亲表示法结果&#xff0c;用一个二维数组表示&#xff0c;位置下标从0开始&#xff0c;如果双亲位置为-1则表示该结点为根结点 编写程序&#xff0c;输出该树…