当前位置: 首页 > news >正文

C#委托—马工教你轻松玩转委托

前言

在C#中有一个小白谈之色变的知识点叫委托,很多学了一两年C#的还不知道委托究竟是什么东西,本文就来帮你彻底解开解惑,从此委托就是小儿科!

1、委托的本质

委托也是一种类型,大家知道所有的类型一定对应一种数据,比如Int类型,那么它对应的就是Int类型的数据,委托对应的是什么类型的数据呢?委托对应的是方法类型,由于委托是一个引用类型,所以它存储的就是方法的地址,我们操作委托实际上就是操作方法。

2、自定义一个无返回值的委托类型

在C#中我们使用delegate 关键字来定义委托类型,由于委托对应的是方法,也就是所谓的函数,那么大家知道方法是分为有返回值的方法和无返回值的方法的。下面就使用delegate 关键字来定义一个无返回值的委托类型,具体如下:

2.1 定义一个委托类

这里使用了void 代表方法无返回值,然后OutputValueDelegate是类名,int x,int y代表这个方法包含两个int类型的参数。

  public delegate void OutputValueDelegate(int x, int y);//声明一个无返回值的委托类型

2.2 声明一个委托类型的对象

  OutputValueDelegate outputValueDelegate;//定义一个委托类型的对象

2.3 定义一个委托类型匹配的方法

定义一个无返回值,有两个Int类型参数的方法

 private void OutputValue(int x, int y){Console.WriteLine(x + y);} 

2.4 为委托类型的变量赋值

由于委托对应的就是方法,所以这里将方法名称直接赋值给委托对象即可,如下:
outputValueDelegate = OutputValue;

2.5 调用委托

调用委托实际上就是调用委托对应的方法,由于绑定的方法是将传入的两个值相加,所以最后得到的值是3。

  outputValueDelegate(1, 2);

输出:

3

3、自定义一个有返回值的委托类型

3.1 定义一个委托类

可以看到下面定义的一个委托类型返回值是int类型,和无返回值委托类型相比,将void关键字变成了int。

  public delegate int GetMaxValueDelegate(int x, int y);//声明一个有返回值的委托类型

3.2 声明一个委托类型的对象

     GetMaxValueDelegate getMaxValueDelegate;//定义一个委托类型的对象

3.3 定义一个委托类型匹配的方法

定义一个无返回值,有两个Int类型参数的方法

private int GetMax(int x, int y){return x > y ? x : y;}

3.4 为委托类型的变量赋值

由于委托对应的就是方法,所以这里将方法名称直接赋值给委托对象即可,如下:
getMaxValueDelegate = GetMax;

3.5 调用委托

调用委托实际上就是调用委托对应的方法,由于绑定的方法是获取两个输入值的最大值,所以最后得到的值是2。

    int val = getMaxValueDelegate(1, 2);Console.WriteLine(val);

输出:

2

4、使用系统自带的无返回值委托类型

在C#中提供了一种无返回值委托类型叫Action,这样我们就不用自己去定义委托类型了,使用过程如下。

4.1 声明一个委托类型的对象

     Action<int, int> outputValueAction;//定义一个无返回值的委托对象

4.2 定义一个委托类型匹配的方法

定义一个无返回值,有两个Int类型参数的方法

private void OutputValue(int x, int y){Console.WriteLine(x + y);} 

4.3 为委托类型的变量赋值

由于委托对应的就是方法,所以这里将方法名称直接赋值给委托对象即可,如下:
outputValueAction = OutputValue;

4.4 调用委托

调用委托实际上就是调用委托对应的方法,由于绑定的方法是将传入的两个值相加,所以最后得到的值是3。

   outputValueAction(1, 2);

输出:

3

5、使用系统自带的有返回值委托类型

在C#中提供了一种有返回值委托类型叫Func,这样我们就不用自己去定义委托类型了,使用过程如下。

5.1 声明一个委托类型的对象

这里注意Func的最后一个参数是返回值类型,前面的是方法的参数类型

      Func<int, int, int> getMaxValueFunc;//定义一个有返回值的委托对象(最后一个参数是返回值)

5.2 定义一个委托类型匹配的方法

定义一个无返回值,有两个Int类型参数的方法

private int GetMax(int x, int y){return x > y ? x : y;}

5.3 为委托类型的变量赋值

由于委托对应的就是方法,所以这里将方法名称直接赋值给委托对象即可,如下:
getMaxValueFunc = GetMax;

5.4 调用委托

调用委托实际上就是调用委托对应的方法,由于绑定的方法是获取两个输入值的最大值,所以最后得到的值是2。

   int   val = getMaxValueFunc(1, 2);Console.WriteLine(val);

输出:

2

作者介绍

马工2017年硕士毕业,一直从事上位机软件开发工作,在我工作的第四年年薪突破了40万+,为了帮助跟我一样从底层出身的上位机软件工程师早日达到高级工程师的水平,早日找到30万+的工作,我根据多年项目经验,总结出了一系列可直接用于项目的C#上位机实战教程推荐给大家,目前在CSDN已经超过一千人订阅,如果你不甘贫庸,想像我一样早日拿到高薪,马工强烈推荐你早日学这套教程,雷军曾说这个世界上有99%的问题别人都遇到过,你要做的不是闷头干!而是找这个领域的专家问一下,这是最快速提升自己的方法!

年入30万+C#上位机实战必备教程推荐

1、《C#串口通信从入门到精通》
2、《 C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《 C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》

http://www.lryc.cn/news/424578.html

相关文章:

  • 当下最强的 AI art 生成模型 Stable Diffusion 最全面介绍
  • NPM 使用教程:从入门到精通
  • 基于ssm+vue+uniapp的停车场小程序的设计与实现
  • C语言典型例题37
  • 二自由度机械臂软件系统(三)ros2_control硬件底层插件
  • 24.8.9.11数据结构|链栈和队列
  • StarSpider:一款高效的网络爬虫框架解析与实战
  • LVS详细解析及其NAT模式与DR模式部署(理论+实验全方位指导)
  • 负载均衡相关概念介绍(一)
  • 二叉树详解(1)
  • Spring定时任务注解
  • 数据结构-绪论
  • Web开发:web服务器-Nginx的基础介绍(含AI文稿)
  • 共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目
  • Linux 服务器上简单配置 minio
  • TypeScript 面试题汇总
  • 杰卡德系数
  • 微服务实现-sleuth+zipkin分布式链路追踪和nacos配置中心
  • 数学中常用的解题方法
  • pytorch 1 张量
  • 音视频开发继续学习
  • 【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task1:智能编程助手(持续更新)
  • 如何判断监控设备是否支持语音对讲
  • Grafana+Influxdb(Prometheus)+Apache Jmeter搭建可视化性能测试监控平台
  • 【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)
  • 计算机毕业设计 美发管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证
  • GB/T35561-2017d,GB/T38565-2020,ocr解析文本
  • IDEA使用LiveTemplate快速生成方法注释
  • 慢SQL优化