委托是c#语言的一大亮点,最大的作用是让一个方法可以作为另一个方法的参数

下面是一个简单的示例

    internal class Program
{
//使用delegate定义委托类型
private delegate void MyDelegate(int a, int b);
private static void Main()
{
//声明变量,实例化委托,传递的实例方法,也可以是静态类型
var d = new MyDelegate(new Program().Add);
//委托作为参数传给另一个方法
MyMethod(d);
Console.Read();
}
//方法定义要与委托定义相同,返回类型void,int类型参数
private void Add(int a, int b)
{
int sum = a + b;
Console.WriteLine(sum);
}
//方法参数是委托类型
private static void MyMethod(MyDelegate myDelegate)
{
//方法中调用委托
myDelegate(1, 2);
}
}

再来看看委托链,多个委托链接在一起就是委托链,使用 “+”链接委托,“-”移除委托

    internal class Program
{
public delegate void MyDelegate(); private static void Main()
{
var d1 = new MyDelegate(Program.Method1);
var d2 = new MyDelegate(new Program().Method2);
//定义一个委托对象
MyDelegate d = null;
//“+”链接委托,“-”移除委托,如d -= d2;
d += d1;
d += d2;
//调用委托链
d();
Console.Read();
} private static void Method1()
{
Console.WriteLine("静态方法");
} private void Method2()
{
Console.WriteLine("实例方法");
}
}

这时候再看官方文档 "如何合并委托(多播委托)(C# 编程指南)"就很容易理解了

    // 定义委托
internal delegate void CustomDel(string s); internal class TestClass
{
// 定义两个方法,方法定义要与委托定义相同,返回类型void,string类型参数
private static void Hello(string s)
{
Console.WriteLine($" Hello, {s}!");
} private static void Goodbye(string s)
{
Console.WriteLine($" Goodbye, {s}!");
} private static void Main()
{
// 定义委托实例
CustomDel hiDel, byeDel, multiDel, multiMinusHiDel;
// 如果想要省略定义委托,可以使用Action<string>替代
// 如 Action<string> hiDel, byeDel, multiDel, multiMinusHiDel; // 引用方法Hello.
hiDel = Hello;
// 引用方法 Goodbye.
byeDel = Goodbye; //“+” 链接两个委托形成委托链(多播委托)
multiDel = hiDel + byeDel;
//“-” 从委托链中移除委托
multiMinusHiDel = multiDel - hiDel; Console.WriteLine("Invoking delegate hiDel:");
hiDel("A");
Console.WriteLine("Invoking delegate byeDel:");
byeDel("B");
Console.WriteLine("Invoking delegate multiDel:");
multiDel("C");
Console.WriteLine("Invoking delegate multiMinusHiDel:");
multiMinusHiDel("D");
}
} /* 输出:
Invoking delegate hiDel:
Hello, A!
Invoking delegate byeDel:
Goodbye, B!
Invoking delegate multiDel:
Hello, C!
Goodbye, C!
Invoking delegate multiMinusHiDel:
Goodbye, D!
*/

(PS:委托的本质是一个类)

3分钟看懂C#委托的更多相关文章

  1. [转帖]10分钟看懂Docker和K8S

    10分钟看懂Docker和K8S https://zhuanlan.zhihu.com/p/53260098 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这 ...

  2. 十分钟看懂AES加密

    十分钟看懂AES加密算法 今天看了Moserware的<A Stick Figure Guide to the Advanced Encryption Standard(AES)>收获了不 ...

  3. 5分钟看懂Code128条形码

    什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...

  4. 10分钟看懂Docker和K8S

    本文来源:鲜枣课堂 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的 ...

  5. 十分钟看懂,未来Web前端开发最新趋势

    首先,展望未来趋势我们就要弄懂过去的一年,也就是18年,web前端开发的重要新闻.重要事件和JavaScript的各种流行框架.模式发展趋势. 我们来快速回顾一下. NPM热门前端框架下载 先来看最热 ...

  6. 干货满满!10分钟看懂Docker和K8S(转)

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  7. 干货满满!10分钟看懂Docker和K8S

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  8. 10 分钟看懂 Docker 和 K8S!

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC, ...

  9. 五分钟看懂js关键字this

    this是js里面很常用的关键字,而灵活的js也赋予了这个关键字无穷的生命力,相信你也有被它糊弄的时候,我总结了一个6字原则,大部分场合都能清醒分辨this到底指向who,跟大家分享一下,欢迎指正. ...

随机推荐

  1. windows文本转语音 通过java 调用python 生成exe可执行文件一条龙

    我已记不清 我失败过多少次 ,找过多少资料 ,但是功夫不负有心人 ,还是成功了. 所有资料和需要的语音模块的资料以放置在文章末尾, 有些是引用别人的博客的部分内容, 原文是在有道云笔记,所以没有图,请 ...

  2. Rocket - diplomacy - AddressDecoder

    https://mp.weixin.qq.com/s/UHGq74sEd9mcG5Q3f-g3mA   介绍AddressDecoder的实现.   ​​ 1. 基本定义   ​​ 每个Port包含多 ...

  3. Rocket - diplomacy - ValName

    https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​ ...

  4. java实现第三届蓝桥杯数量周期

    数量周期 [结果填空](满分9分) 复杂现象背后的推动力,可能是极其简单的原理.科学的目标之一就是发现纷繁复杂的自然现象背后的简单法则.爱因斯坦的相对论是这方面的典范例证. 很早的时候,生物学家观察某 ...

  5. java实现第六届蓝桥杯打印大X

    打印大X 打印大X 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用 ...

  6. java代码(9) ---guava之Lists、Maps

     guava之Lists.Maps 谷歌提供了guava包里面有很多的工具类,Lists和Maps集合工具,集合操作做了些优化提升 一.概述 1.静态工厂方法 (1)Guava提供了能够推断泛型的静态 ...

  7. Linux 终止进程

    kill命令 kill -l,查看可用的进程号 支持64种,常用的三种,1代表重启,9代表强制终止,15代表正常终止 kill -1 进程ID号,重启进程 killall -9 进程名,杀死对应的全部 ...

  8. Jmeter加密函数__digest总结

    __digest可对多个字符串拼接起来后进行加密,支持多种加密方式,如MD5.MD2.SHA-1.SHA-224.SHA-256.SHA-384.SHA-512. 使用起来非常方便. (注:Jmete ...

  9. 痞子衡嵌入式:降低刷新率是定位LCD花屏显示问题的第一大法(i.MXRT1170, 1280x480 LVDS)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170上LCD花屏显示问题的分析解决经验. 痞子衡最近这段时间在参与一个基于i.MXRT1170的大项目(先保个密),需要 ...

  10. tensorflow2.0学习笔记第一章第五节

    1.5简单神经网络实现过程全览