网站首页 > 技术文章 正文
前言
大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!在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控件从入门到精通》
如需获取教程,请私信马工获取!
猜你喜欢
- 2025-04-30 基本语法 - C#入门教程(c#基础语法汇总pdf)
- 2025-04-30 C# OpenCV机器视觉:缺陷检测(opencv缺陷检测案例)
- 2025-04-30 C#与TypeScript语法深度对比(c#typeof作用)
- 2025-04-30 .NET10:C#14的一些新功能(c# 10.0)
- 2025-04-30 39.C# 接口(c#接口是什么)
- 2025-04-30 C# 中的Async 和 Await 的用法详解
- 2025-04-30 C#之类型转换(c#类型转换有哪几种)
- 2025-04-30 设计模式(C#) - 装饰器模式实现详解
- 2025-04-30 C#中的Channel(c#中的类由哪三个部分组成)
- 2025-04-30 C# 管道模式:构建灵活、可扩展的处理流程
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- sqlset (59)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)