委托原来如此简单

什么是委托?

委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托特别用于实现事件和回调方法!

使用委托:

public delegate void MyDelegateDemo();private void HelloWorld(){Console.WriteLine("Hello World");}public  void Print(){MyDelegateDemo myDelegateDemo;myDelegateDemo = HelloWorld;myDelegateDemo();}

首先我们可以看出我们使用委托时:

第一步定义一个委托类型 

public delegate void MyDelegateDemo();

第二步实例化委托

MyDelegateDemo myDelegateDemo;

第三步定义一个跟委托类型相匹配的函数

private void HelloWorld(){Console.WriteLine("Hello World");}

第四步将函数交给委托实列

myDelegateDemo = HelloWorld;

最后我们才能使用该委托!

说一说我对委托的理解:

比如你知道定义一个普通变量

int i;

这个变量i会在后续的方法中使用

比如说

private void PrintInt(int i){Console.WriteLine(i);}

我们后续需要输出不同的值的时候,改变一下变量即可!

那么我们定义一个委托变量

MyDelegateDemo myDelegateDemo;

和普通变量不同的是MyDelegateDemo类型是我们自己定义的类型而已。

使用

private void PrintDelagate(MyDelegateDemo myDelegateDemo){myDelegateDemo();}

其实和普通变量使用方法一样而已!

而区别在于

普通变量存放的是不同的变量

而委托变量存放的是不同的方法

通过这个例子我们看出

private void HelloWorld(){Console.WriteLine("Hello World");}public  void Print(){PritfDocument(HelloWorld);}private void PritfDocument(MyDelegateDemo myDelegateDemo){Console.WriteLine("来到了打印店");Console.WriteLine("打印的内容是");myDelegateDemo();Console.WriteLine("离开了打印店");}

可以看到输出内容是:

5ce9b7243d122e088ef47f3f129ba3ea.png

简化

我们在使用委托的时候定义起来是不是很麻烦,觉得很烦,微软也想到了这一点!

所以Action和Func就出来了,这两个有什么区别呢?

两者的区别在于Action没有返回值,而Func有返回值!

那么我们就可以简化一下PritfDocument方法

private void PritfDocument(Action myDelegateDemo){Console.WriteLine("来到了打印店");Console.WriteLine("打印的内容是");myDelegateDemo();Console.WriteLine("离开了打印店");}

但是这样也很烦 我们还需要自己去定义一个方法呢!

所以我们使用匿名方法去掉这个步骤

PritfDocument(delegate () { Console.WriteLine("Hello World"); }private void PritfDocument(Action myDelegateDemo){Console.WriteLine("来到了打印店");Console.WriteLine("打印的内容是");myDelegateDemo();Console.WriteLine("离开了打印店");});

那使用匿名方法让代码看起来不是那么的简洁,我们还能不能优化呢?

c#作为世界上最好的语言但是也是可以的!

使用Lambda来简化,

最后变成了

PritfDocument(()=> Console.WriteLine("Hello World"));private void PritfDocument(Action myDelegateDemo){Console.WriteLine("来到了打印店");Console.WriteLine("打印的内容是");myDelegateDemo();Console.WriteLine("离开了打印店");}

最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!

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

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

相关文章

http协议--笔记

HTTP协议的缺点:1.通信使用明文(不加密),内容可能会被窃听2.不验证通信方的身份,因此有可能遭遇伪装3.无法证明报文的完整性,所以有可能已遭篡改 防止窃听保护信息的几种对策:加密技术通信的加密…

sublime mysql插件_开发者最常用的8款Sublime text 3插件

Sublime Text作为一个尽为人知的代码编辑器,其优点不用赘述。界面整洁美观、文本功能强大,且运行速度极快,非常适合编写代码,写文章做笔记。Sublime Text还支持Mac、Windows和Linux各大平台,方便用户使用。种类繁多、功…

.NET Nancy 详解(三) Respone 和 ViewEngine

我们在ASP.NET MVC中可以返回各种类型的ActionResult(以下图片来自于园友--待补。。) 在Nancy 中本着简单粗暴的原则,使用方式略有不同。这期我们使用的版本是Nancy的第一个tag version 0.0.2.0。 public MainModule(IRouteCacheProvider routeCacheProvider){Get[&…

javascript中Date对象的初始化方法

为什么80%的码农都做不了架构师?>>> 在前端代码中难免会涉及到时间的操作,如何构造一个Date对象呢?javascript为我们提供如下几种方式: new Date("month dd,yyyy hh:mm:ss");new Date("month dd,yyyy&…

java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake

祝大家新年快乐,有任何问题可与我联系:关于snowflake算法的介绍和原理这里不过多说明了,网上有很多。这里简单描述下SnowflakeUtil的优点:1、做为底层工具使用,可用于数据库主键、订单编号……2、不依赖数据库&#xf…

云上“炼”码兵器 GitHub Codespaces

GitHub 是全球最受欢迎的开发者平台, ⾃从微软收购了 GitHub 后, GitHub 的功能就越来越强⼤,除了原有的代码管理外,也增加了很多硬货,这就包括了集成 CI/CD 的 GitHub Actions ,以及完善的项⽬管理功能&am…

python 中的yum pip

为什么80%的码农都做不了架构师?>>> python 中的yum pip pip 可以管理python中的模块,之于python就像yum之于redhat 转载于:https://my.oschina.net/sskxyz/blog/368099

ArcGIS怎样获取重分类后各类所占的像元个数

【问题描述】如下图所示,给西北地区2007年平均NDVI分等级,求各个等级的面积所占百分比? 解决方法: 刚开始老在如下图所示的Properties界面中进行重分类,虽然能得到分类结果,但是却得不到像元个数,因为是连续的,也不会有属性表生成: 后来发现,工具箱中还有个分类工具…

13.ThreadPoolExecutor线程池之submit方法

jdk1.7.0_79 在上一篇《ThreadPoolExecutor线程池原理及其execute方法》中提到了线程池ThreadPoolExecutor的原理以及它的execute方法。本文解析ThreadPoolExecutor#submit。 对于一个任务的执行有时我们不需要它返回结果,但是有我们需要它的返回执行结果。对于线程…

java idea 模块_idea 多模块项目依赖父工程class找不到问题的方法

比如,我们有这么个过程,项目结构如下:a--b--ca是总结点,b是子节点,c是父节点b依赖父节点class,通过maven构建时通常我们会在子节点中添加父节点依赖,如:com.xxxc${project.version}虽…

关于OAuth2.0 Authorization Code+PKCE flow在原生客户端(Native App)下集成的思考

Working with Proof Key for Code Exchange (PKCE) - DEV Community写在前面前几天看了园友的一篇文章被广泛使用的OAuth2.0的密码模式已经废了,放弃吧 被再次提起:Implicit Flow Password Grant,均已被标记为Legacy,且OAuth2.1里…

【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)

原理:每隔sp(整数)个数即取数并判断大小,交换,先构造局部有序序列,直到sp为1,构造完整的有序序列。 给出一组数据,如下: 0 1 2 3 4 5 6 7 8 9 49 38 65 97 …

【131天】尚学堂高淇Java300集视频精华笔记(65-66)

第65集:常用类Date类的使用JDk源码分析 Date时间类(java.util.Date) 在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。 Date()分配一个Date对象,并初始化此对象为当前的日期和时间精确到毫秒…

ArcGIS 10.2加载在线影像底图

两种方法: 一、File→ArcGIS Online→影像图→Open。 二、 效果:

都说不要装箱,那装箱到底带来了什么开销?

相信很有朋友在面试时大多会被问到 装箱 的问题,也是一个经典的问题,可深可浅,那今天我们就从 汇编 和 内存 角度进行统一解读下。为了方便演示,先上一段装箱的代码。class Program{static void Main(string[] args){var i 10;va…

Java中方法的继承以及父类未被子类覆盖的方法调用的问题

在看java继承这一块的时候发现了一个问题,即父类未被子类覆盖的方法是如何调用的? 是子类拥有了父类的该方法只是没有显示表示,还是子类调用了父类的该方法。 为此做了一下验证 代码如下: public class One {protected void print…

Excel VBA编程基础

一、程序基本调试方法 1、VB程序的三种状态:设计时、运行时和中断模式。 2、但不执行代码,快捷键为F8。 3、中断程序的方法: (1)使用断点 (2)使用Debug.Assert (3)使用监视条件 二、Excel Shape对象

分治算法之合并排序

1、问题 合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列 2、思路 1、分解:将待排序元素分成大小大致相同的两个子序列 2、治理:对两个子序列进行合并排序 3、…

WPF 实现截屏控件之移动(二)(仿微信)

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 接着上一篇&#xff0c;兼容屏幕缩放问题。01—代码如下一、创建ScreenCut.xaml代码如下。<ResourceDictiona…