做网站 套模板 后端/长沙seo男团

做网站 套模板 后端,长沙seo男团,做网站贵,网站建设与维护实训报告lambda表达式不简化写起来和匿名函数很像,而匿名函数通常赋值给委托,通过委托进行调用。以下我们对lambda和委托的基本规则与使用进行整理,同时为了加深理解和记忆,我们整理了委托是如何一步步演化到lambda。 1. 委托 委托是一个…

lambda表达式不简化写起来和匿名函数很像,而匿名函数通常赋值给委托,通过委托进行调用。以下我们对lambda和委托的基本规则与使用进行整理,同时为了加深理解和记忆,我们整理了委托是如何一步步演化到lambda。

1. 委托

委托是一个可以指向方法的类型,调用委托变量时,执行的就是变量指向的方法,以下介绍的是委托的基本用法。

1.1 自定义委托

委托的定义与类不同,更像是C中的函数指针声明。定义一个委托要注意以下几点:

  • 最重要的是要做到类型兼容:
    • 参数列表(参数个数,参数数据类型)一致
    • 返回值数据类型一致
      在这里插入图片描述
  • 注意定义委托的位置,因为委托和类是平级关系,所以通常把委托声明在名称空间体里面;
namespace ConsoleApp3
{//定义委托delegate double Calc(double x, double y);internal class Program{//定义方法public static double Add(double x, double y){ return x + y;}static void Main(string[] args){//使用委托Calc calc = Add;Console.WriteLine(calc(1.2, 8.8));Console.Read();}}
}

使用委托时还应注意:

  • 上面例子中:Calc calc = Add;,这里要注意传入方法时不能带括号,带括号表示调用
  • 既然委托的本质也是类,同样可以new一个实例:Calc calc = new Calc(Add);

1.2 泛型委托

自定义泛型委托

<> 内是类型参数列表,用于替换使用的返回值以及参数列表中的参数类型;

namespace ConsoleApp3
{delegate T AddDele<T>(T a, T b);internal class Program{static void Main(string[] args){AddDele<double> addDele = Add;Console.WriteLine(addDele(100, 200));}public static double Add(double x, double y){return x + y;}}
}

Action

.NET中已经为我们定义好了无返回值的泛型委托Action,泛型参数列表与传入方法的参数列表相对应。如果没有泛型参数列表,表示该方法无参数列表,无返回值。

static void Main(string[] args)
{Action<string> action = ShowString;action("Hello");Console.Read();
}public static void ShowString(string str)
{Console.WriteLine(str);
}

Func

.NET中已经为我们定义好了有返回值的泛型委托Func,泛型参数列表的最后一个参数代表返回值类型,最后一个之前的参数与传入方法的参数列表相对应;如果参数列表只有一个类型,表示该方法没有参数只有一个返回值;

static void Main(string[] args)
{Func<double, double, double> func = Add;Console.WriteLine(func(1.2, 8.8));Console.Read();
}public static double Add(double x, double y)
{return x + y;
}

1.3 委托指向匿名函数

匿名函数顾名思义就是没有名字的函数,该函数可以绑定到委托类型的变量上。匿名函数的定义形式为:delegate + (参数列表) + {方法体}

static void Main(string[] args)
{Action action = delegate (){Console.WriteLine("I am anonymous function");};action();Func<int, int, int> func = delegate (int x, int y) {return x + y; };Console.WriteLine(func(1, 2));
}

1.4 委托转换

不同的委托不能混用,这很好理解,不同的Class即使里面的属性,方法,字段等全都一样,也是两个不同的类型,委托也一样,即使定义了两个委托参数列表和返回值类型一样,仍然是不同的委托,不可以混用;举个例子:

namespace ConsoleApp3
{delegate int AddDele1(int x, int y);delegate int AddDele2(int x, int y);internal class Program{static void Main(string[] args){AddDele1 addDele1 = Add;AddDele2 addDele2 = addDele1;Console.WriteLine(addDele1(1, 2));Console.WriteLine(addDele2(2, 3));Console.Read();}public static int Add(int x, int y){return x + y;}}
}

结果编译器报错了:Cannot implicitly convert type 'ConsoleApp3.AddDele1' to 'ConsoleApp3.AddDele2'',看来不同的委托无法进行隐式转换,正确的做法应该是:

namespace ConsoleApp3
{delegate int AddDele1(int x, int y);delegate int AddDele2(int x, int y);internal class Program{static void Main(string[] args){AddDele1 addDele1 = Add;AddDele2 addDele2 = new AddDele2(addDele1);Console.WriteLine(addDele1(1, 2));Console.WriteLine(addDele2(2, 3));Console.Read();}public static int Add(int x, int y){return x + y;}}
}

2. 从委托到lambda的演化

我们从一个正常的委托调用,看看是如何一步步进化到一个最简lambda表达式的。

1)委托指向普通方法:

private static void CommonDele()
{Action<string> action = ShowStr;action("CommonDele");Func<int, int> func = ShowNumber;Console.WriteLine(func(1));
}private static void ShowStr(string str)
{Console.WriteLine(str);
}private static int ShowNumber(int a)
{return a;
}

2)委托指向匿名方法:delegate + 参数列表 + 方法体

private static void AnonymousDele()
{Action<string> action = delegate (string str){Console.WriteLine(str);};action("AnonymousDele");Func<int, int> func = delegate (int a){return a;};Console.WriteLine(func(2));
}

3)引入lambda表达式:参数列表 + => + 方法体

private static void LambdaDele()
{Action<string> action = (string str) =>{Console.WriteLine(str);};action("LambdaDele");Func<int, int> func = (int a) =>{return a;};Console.WriteLine(func(3));
}

4)简化lambda表达式:可以省略参数类型,因为编译器能够根据委托类型推断出参数的类型

private static void LambdaDele2()
{Action<string> action = (str) =>{Console.WriteLine(str);};action("LambdaDele2");Func<int, int> func = (a) =>{return a;};Console.WriteLine(func(4));
}

5)简化lambda表达式:如果只有一个参数,参数的()也可以省略

private static void LambdaDele3()
{Action<string> action = str =>{Console.WriteLine(str);};action("LambdaDele3");Func<int, int> func = a =>{return a;};Console.WriteLine(func(5));
}

6)简化lambda表达式:如果方法体没有返回值,且方法体只有一行代码,可省略 {};如果有返回值,且方法体中只有一行代码,那么可以省略方法体的{}以及return

private static void LambdaDele4()
{Action<string> action = str => Console.WriteLine(str);action("LambdaDele4");Func<int, int> func = a => a;Console.WriteLine(func(6));
}

3. lambda

根据上面从委托到lambda的演化过程,我们整理下lambda的基本规则:

  • 基本形式:参数列表 + => + 方法体
  • 可以省略参数数据类型,因为编译器可根据委托类型推断参数类型
  • 如果只有一个参数,参数的 () 也可以省略,多于一个不可以省略
  • 如果方法体没有返回值,且方法体只有一行代码,可省略 {}
  • 如果方法体有返回值,且方法体只有一行return语句,那么可以省略方法体的 {} 以及return;

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

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

相关文章

AI大模型发展对语音直播交友系统源码开发搭建的影响

近年来&#xff0c;AI大模型技术突飞猛进&#xff0c;为语音直播交友系统的源码开发搭建带来了深远影响。本文将从技术发展层面&#xff0c;探讨AI大模型如何赋能语音直播交友系统&#xff0c;并分析其对开发流程、功能实现和用户体验等方面带来的变革。 一、技术赋能&#xff…

C++面试题,TCP和UDP方面(1)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言TCP和UDP的区别UDP如何实现可靠TCP滑动窗口原理TCP流量控制TCP超时重传总结 前言 这是个人总结的C方向的面试题,TCP和UDP方面&#xff0…

Huatuo热更新--如何使用

在安装完huatuo热更新插件后就要开始学习如何使用了。 1.创建主框渐Main 新建文件夹Main&#xff08;可自定义&#xff09;&#xff0c;然后按下图创建文件&#xff0c;注意名称与文件夹名称保持一致 然后新建场景&#xff08;Init场景&#xff09;&#xff0c;添加3个空物体…

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本&#xff1a; 2. springboot项目搭建 可以集成在自己的项目里&#xff0c;也可以到 spring.io 生成一个项目 生成的话&#xff0c;如下…

如何在 macOS 上配置 MySQL 环境变量

如何在 macOS 上配置 MySQL 环境变量 步骤 1: 查找 MySQL 安装路径 打开终端&#xff0c;使用以下命令查找 mysql 的可执行文件路径&#xff1a; which mysql如果该命令没有返回结果&#xff0c;可以使用 find 命令&#xff1a; sudo find / -name "mysql" 2>/de…

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据&#xff0c;根据指定的不同类型的数据配置规则来解析成对应的代码文本&#xff0c;将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…

【vue项目中如何实现一段文字跑马灯效果】

在Vue项目中实现一段文字跑马灯效果&#xff0c;可以通过多种方式实现&#xff0c;以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用CSS动画和Vue数据绑定 这种方法通过CSS动画实现文字的滚动效果&#xff0c;并结合Vue的数据绑定动态更新文本内容。 步骤&#xff…

LeeCode题库第二十八题

28.找出字符串第一个匹配项的下标 项目场景&#xff1a; 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 …

深入解析BFS算法:C++实现无权图最短路径的高效解决方案

在无权图中&#xff0c;广度优先搜索&#xff08;BFS&#xff09;是解决最短路径问题的高效算法。接下来博主从专业角度深入探讨其实现细节&#xff0c;并给出C代码示例&#xff1a; 目录 一、核心原理 二、算法步骤 三、C实现关键点 1. 数据结构 2. 边界检查 3. 路径回溯…

Plant Simulation培训教程-双深堆垛机立库仿真模块

原创 知行 天理智能科技 2025年01月03日 17:02 浙江 又到年终盘点的时候了&#xff0c;在这里我把之前录制的Plant Simulation培训教程-双深堆垛机立库仿真模块分享出来&#xff0c;有需要的可以直接联系我。 双深堆垛机立库仿真模块基于单深模块开发&#xff0c;适用于双深堆…

文本和语音互转

目录 1. 下载依赖ddl 2. 引入Pom依赖 3. java代码 二. 语音转文本 1. 下载中文语音转文本的模型 2. 引入pom依赖 3. java代码 4. 运行效果 1. 下载依赖ddl 文字转语音文件需要使用jacob的dll文件放在jdk安装目录下的bin文件夹下 点击官网下载录或者通过csdn下载 2. …

Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 价格区间界面 用户信息界面 品牌管理 笔记本管理 电脑主机…

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。

Servlet概述(Ⅰ)

目录 一、Servlet概述 演示 创建JavaWeb项目&#xff08;2017版本为例&#xff09; 1. 打开 IntelliJ IDEA 2. 选择项目类型 3. 配置框架 二、Servlet初识(熟练) 1.servlet说明 2.Servlet 接口方法 3.创建Servlet 4.JavaWeb请求响应流程 ​编辑 ​编辑 5.servlet…

Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)

Linux软件包管理器–apt Linux安装软件的方式 在Linux下安装软件的方法有以下三种&#xff1a; 下载到程序的源代码&#xff0c;自己编译出可执行程序获取deb安装包、然后使用dpkg命令安装。&#xff08;不解决依赖关系&#xff09;通过apt进行安装软件。 小知识点&#xf…

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…

【前端框架】vue2和vue3的区别详细介绍

Vue 3 作为 Vue 2 的迭代版本&#xff0c;在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别&#xff1a; 响应式系统 Vue 2 实现原理&#xff1a;基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时&#xff0c;Vue 会遍历…

基于Spring Boot的农事管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!

2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号&#xff1a;AI将掀起工业革命级增长&#xff0c;量子计算突破引爆材料科学革命&#xff0c;游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点&#xff0c;揭示科技巨头的未来十年…

HBase Shell

目录 1. HBase常用命令1.1 create命令1.2 list命令1.3 describe命令1.4 put命令1.5 get命令1.6 scan命令1.7 count命令1.8 exists命令1.9 修改表结构1.10 delete命令1.11 deleteall命令1.12 truncate命令1.13 disable、drop命令1.14 status命令1.15 version命令 2. HBase Shell…