品味C#委托之奥秘

【一键搞定】ThinkPHP6.0.2+PHPStudy+Composer极速安装指南——附完整下载包与避坑技巧 本文提供了一份ThinkPHP6.0.2的完整下载包,并详细介绍了如何配合PHPStudy和Composer进行极速安装与配置。指南涵盖了环境准备、Composer国内镜像加速、项目部署及常见避坑技巧,旨在帮助开发者,尤其是内网或网络不佳的用户,快速搭建可运行的TP6开发环境,绕过依赖下载的繁琐步骤。 阅读详情

委托可以算的上C#的语法精髓,如果说不懂委托就像不懂C#语言一样,一点儿都不为过。废话不多说,开始扯吧。

首先是最原始的状态

1.委托(delegate):

定义:

 	public delegate bool Compare(int a, int b);

        public int MyCompare(Compare selector, int a, int b)
        {
            return selector(a, b)?1:0;
        }

	public bool ECompare(int a, int b)
        {
            return a > b;
        }

调用:

        Compare cpe=new Program().ECompare;
        bool result=cpe.Invoke(10,20);//也可以直接bool result=cpe(10,20);
 	int val = new Program().MyCompare(cpe, 10, 20);//使用

让我联想到了接口,只是定义了方法的约束,并没有实现,具体实现的行为,是通过这行代码实现的:Compare cpe=new Program().ECompare;
对于这行代码,int val = new Program().MyCompare(cpe, 10, 20);,如果写过JavaScript的朋友是不是有种似曾相识的感觉?

我们将其简化,那么,可以写成这样:

 int val = new Program().MyCompare(delegate (int a, int b)
            {
                return a > b;
            }, 10, 20);

这种形式称为匿名方法,可以使得委托的使用变得简洁,但是,这样仍然有很多不方便的地方,于是,微软为我们定义了两个超级好用的系统委托:

2:Action

由于我的Visual Studio安装了reshaper,F12跳转可能和大家的不一样,请看图:

这么多Action的意思是,T1-T8表示委托的参数,返回值类型为void

那么,有很多问题就可以迎刃而解了,由于我没有想到怎么给大家举例子,那么先暂时放一放,一会儿再用它。大笑

3:Func,不废话了,

这么多Func的意思是:前N个参数表示委托的输入参数,最后一个参数表示返回参数的类型

我也暂时不举例子。
4:lambda表达式,lambda表达式可以说是C#的精髓中的精髓,它一般是这样的形式:
()=>{},其中左边的括号表示输入参数(一般我们可以不用写明它的类型,但是有时候编译器无法自动自动匹配类型的时候,需要写明,如果写明,不会报错),右边的花括号可有可无,其实就是函数的方法体。
那么,之前提到的Func和Action就好举例子了。我们写几个代表性的例子:
 //private Func<int, bool> overTen = (a) =>
        //{
        //    return a > 10;
        //};
        private Func<int, bool> overTen = (a) => a > 10;
这两种写法的道理是一样的,可以根据自己的喜好写。
我们使用Action对List进行遍历,代码可以简单的让你无法想象:
 new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }.ForEach(item =>
            {
                Console.WriteLine(item);
            });
如果你查看ForEach的方法声明,可以发现它就是接收Action<T>类型

其实说到这儿,已经说到了LINQ的范畴了,我水平有限,只是简单的提一下吧,LINQ有三套,有LINQ to XML(专门操作XML),LINQ to Objects(典型代表就是我们在List中看到的很多方法),LINQ to Entities(用于操作数据库的有关的)
例如:
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);这是Select的其中一个定义,可以看到Func(注:IEumerable定义了这么Select多方法,List实现了IEnumerable,不难理解为什么会有三套LINQ,其实只是实现的方式不同,典型的多态)
5:Predicate:
我找了一个定义在List上的例子:public T Find(Predicate<T> match);
导航过去:public delegate bool Predicate<in T>(T obj);(是不是一个lambda表达式就OK了?哈哈吐舌头)

我个人很多的关于委托的理解来源于金旭亮老师,向他致以最诚挚的谢意。

6.3 节深度拆解:Hermes Agent 多 Agent 协同执行链路的 4 层设计逻辑 拆解 Hermes 多 Agent 协同的 4 层工程化设计(协议层、编排层、执行层、适配层),聚焦协议层的强约束消息 Schema 如何解决 Agent 间语义不一致问题,并提供 `soul.md` 配置、GLM-4.7Flash 结构化输出验证及 v0.13.0/v0.14.0 版本实操避坑指南 阅读详情

相关推荐

顶刊《会计研究》数据复现|最新上市公司数智化数据

本文基于Python文本分析方法构建了中国A股上市公司数智化指标(1991-2024),通过识别年报中的"机器学习""智能医疗"等关键词,量化企业数字化与智能化融合程度。研究发现数智化企业更倾向于非正式渠道的定性披露以规避风险,该指标为监管完善信披规则提供了参考。研究还揭示了数智化对企业信息披露策略的转变,并提出了未来研究方向,包括数智化对绿色创新、ESG表现等影响机制。数据覆盖非金融类上市公司,采用文本挖掘技术构建结构化指标,为相关领域研究提供了微观基础。

PPdata_Academy的博客 1487

C#中的委托

人说委托是oop的精髓所在,我虽然已经学了几个月的c#了,但对于委托一直都是视为禁区,不曾涉及,今日看毕一奇文,豁然而开,原来如此~ 所谓委托,乃是定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。 using System; using...

weixin_30322405的博客 84

Windows摄像头错误0xA00F4240根因与注册表修复指南

Windows摄像头错误码0xA00F4240常被误判为硬件故障,实则源于UWP应用模型下权限调用链断裂——核心是COM组件调用失败(HRESULT 0x80004003),本质反映Windows Runtime API对注册表策略键值(如CapabilityAccessManager\ConsentStore\webcam)的强依赖。该机制涉及服务状态、DWORD权限配置、ACL继承控制等多层校验,任一环节异常(如ValueLastModified时间戳损坏或ALL APPLICATION PACKAGE

weixin_31742871的博客 392

为什么要使用委托

使用C#,但是大多数时候用不上委托,但是委托被讨论得非常多,于是陷入自我怀疑,我是不是太菜了? 我不禁问:为什么要使用委托? 可能试图了解过委托的同学,都被告知委托跟函数指针的关系,又或者被告知一个生活化的举例:委托就是委托别人执行一件事。 可能很多人尝试了解委托的时候都停在这一步,他们了解了委托的写法,寻思:委托也不能简化写法,而且做了和函数同样的事情,为什么要费劲巴拉的使用委托来间接完成函数...

sinat_32727833的博客 2461

WebDriverAgent 菜鸟解析篇

WebDriverAgent 是一个用于模拟移动设备浏览器的 Python 库,可以用来在 PC 上模拟移动设备的浏览器操作,从而进行自动化测试。下面是一个菜鸟对 WebDriverAgent 源码的解析篇,希望能对初学者有所帮助。

DJ355的博客 1223

新手必看!Unity中Tag和Layer的7个实际应用场景(含MOBA案例)

本文深入探讨Unity中Tag和Layer的7个实际应用场景,特别以MOBA游戏开发为例,详细解析如何利用LayerMask进行高效场景管理和碰撞检测优化。从双相机方案到射线检测的精准控制,帮助开发者掌握这些基础功能的进阶用法,提升游戏性能和开发效率。

weixin_28723171的博客 313

细细品味C#——抽象、接口、委托、反射

 什么是抽象类?什么是接口?接口与抽象类有什么区别?什么是委托?什么是反射?   这些都是初学者比较犯糊涂的事情,呵呵,这个也不能说的太绝对,反正我就是那个糊涂中的一个。为了把这些最基本的概念和知识打扎实,我整理一下相关的知识点,希望对你也有帮助。   文章下载地址:http://files.cnblogs.com/xia520pi/C_Sharp_Fa...

weixin_34236869的博客 161

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

在进行深度学习算法的环境部署时,由于生产服务器被彻底隔离外网,只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到Windows 服务器,但在运行labelimg等工具时可能报错,因此用conda-pack来解决。

weixin_44115575的博客 1428

用LangFuse+LangChain打造可观测的AI应用:从埋点到成本监控实战

本文详细介绍了如何将开源可观测性平台LangFuse深度集成到基于LangChain构建的AI应用中,特别是电商客服机器人场景。通过从基础SDK集成、提示词管理到成本监控的完整实战,帮助开发者实现对LLM应用内部工作流的清晰追踪、问题排查与费用分析,从而打造稳定、可控的生产级AI应用。

dapp9builder的博客 711

PLC模糊控制模糊PID(梯形图实现+算法分析)

博途PLC的模糊PID控制详细内容请查看下面的博客文章:Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_RXXW_Dor的博客-优快云博客模糊PID的其它相关数学基础,理论知识大家可以参看专栏的其它文章,这里不再赘述,本文就双容水箱的模糊PID问题做详细讲解(包括所有源代码和模糊规则设置参数)。

RXXW_Dor的博客 5885

委托、组件以及表面上的简单性

 以下是转载,转载自:http://blog.youkuaiyun.com/lxwde/archive/2006/07/02/865523.aspx 本访谈系列的翻译已经征得原作者的同意,转载请保留原作者和译者的链接。Copyright © 1996-2005 Artima Software, Inc. All rights reservedDelegates, Components, a

yc_8301的专栏 763

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

Anders Hejlsberg访谈:委托、组件以及表面上的简单性

本访谈系列的翻译已经征得原作者的同意,转载请保留原作者和译者的链接。Copyright © 1996-2005 Artima Software, Inc. All rights reservedDelegates, Components, and SimplexityA Conversation with Anders Hejlsberg, Part IIIby Bill Venners

5835

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# 在线培训之零基础入门 05:委托与事件

本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG。但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了。 当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了。委托与事件,如果只是泛泛的说一下,可能就是一两句话。但是,我们的课程要遵 循一个原则:知其然,知其所以然。所以,本小节的内容实际上有点多,但是我希望大家细细品味,争取彻底消化委托...

weixin_30508309的博客 100

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

看到他我一下子就悟了---委托

看到大家的留言,我想说下我对委托的了解,首先看它的定义: 委托 就是将方法作为方法的参数 不用先看例子什么的,你就多品味品味这句话,然后你看下使用委托的步骤, 1.定义一个委托 2.注册该委托 3.使用委托 Ok就这么简单,其实委托就像大家常说的那样: 它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在 其实不用怕,你

244

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

关于委托机制的经典好文

呵呵,担心那天连接找不到了,自己收藏下,绝对经典,值得反复品味 原文地址http://topic.youkuaiyun.com/u/20090820/20/E9D30F8A-28AB-49DA-B20B-BA2B8DFC6827.html 《.NET委托: 一个C#睡前故事》 紧耦合 从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是

人在天涯,不倦求索。。 644

委托,事件,动态代理,函数指针

委托,事件,动态代理,函数指针

Rogues的专栏 1009

看到他我一下子就悟了(续)---委托

委托 就是将方法作为方法的参数 不用先看例子什么的,你就多品味品味这句话,然后你看下使用委托的步骤, 1.定义一个委托 2.注册该委托 3.使用委托 Ok就这么简单,其实委托就像大家常说的那样: 它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在 其实不用怕,你就按着这三步来标准没错,下面来个小例子: 第一步:定义委托 publi...

xiaoshengjinbu的博客 80

C# 函数式编程(一)

我们中的一些人可能习惯于使用面向对象编程技术开发应用程序,不关心函数式编程技术。然而,使用函数式编程是有好处的。其中一个好处是,我们将从新的角度看待我们的编程代码,因为函数式编程中的函数与数学函数相同。因为它与数学函数相同,函数式编程中的函数不包含副作用,这意味着函数调用不会对类中的其他函数产生影响。我们将在本书中讨论有关函数式编程的好处和其他相关事项的更多细节。第一章 ,品味 C#中的函数式风格,通过讨论其概念和函数式与命令式编程的比较,介绍了函数式编程方法。我们还尝试将简单的命令式代码重构为函数式方法。

龙哥盟 397

Anders Hejlsberg谈C#设计过程

Anders Hejlsberg谈C#设计过程 原文:http://msdn.microsoft.com/vcsharp/headlines/hejlsberg/default.aspx        Anders Hejlsberg为Borland工作13个春秋后,于1996年加盟微软,最初参与设计Visual J++和WFC(Windows Foundation Classes)。然后,担

软件开发资料汇总 266

C#基础知识简单梳理

转载: https://www.cnblogs.com/yangcaogui/archive/2012/07/14/2574486.html 本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年也辛辛苦苦学习了一年,一直没有机会梳理一下自己的知识,最近花了一些时间整理了一些C#基础知识,也算是对过去的一年做个回顾把~ 文章有点长,请自带瓜子和茶吧,请看下面C#基础知识...

Jane_9008的博客 288

(转)Anders Hejlsberg谈C#设计过程

<br />原文:http://msdn.microsoft.com/vcsharp/headlines/hejlsberg/default.aspx <br /><br />     Anders Hejlsberg为Borland工作13个春秋后,于1996年加盟微软,最初参与设计Visual J++和WFC(Windows Foundation Classes)。然后,担任C#首席设计师和Microsoft .NET Framework设计小组核心成员。目前,他还将继续领导C#语言后续版本

阿弥陀佛 僧伽吒 2518
上一篇: JavaScript闭包
下一篇: cordova+ionic配置
遛狗的代码
博客等级 码龄11年 10粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值