委托是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. hackone ssrf

    alyssa_herrera submitted a report to U.S. Dept Of Defense. Jan 29th (2 years ago) Summary:A server s ...

  2. Spring boot Sample 006之spring-boot-custom-servlet

    一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.步骤 2.1.点击File -> New Project -> Spring Initializer,点击next 2 ...

  3. 大型可视化项目用什么工具好呢?——不如了解一下阿里云DataV尊享版

    随着信息化的发展和进步,可视化大屏开始为社会各行业提供全面应用.目前越来越多的需求显示希望大屏能够更直观的还原出所要展示数据可视化的真实场景,让整个项目更立体.更有科技感,让项目在面对复杂操作时能灵活 ...

  4. Java实现 蓝桥杯 基础练习 字母图形

    基础练习 字母图形 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCD ...

  5. Java实现 LeetCode 125 验证回文串

    125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...

  6. Java实现 LeetCode 107 二叉树的层次遍历 II(二)

    107. 二叉树的层次遍历 II 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null, ...

  7. java实现第五届蓝桥杯等额本金

    等额本金 题目描述 小明从银行贷款3万元.约定分24个月,以等额本金方式还款. 这种还款方式就是把贷款额度等分到24个月.每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息. 假设月利率是 ...

  8. TZOJ 公交车

    描述 公交车在一条笔直的道路(道路宽度忽略,设为X轴)上行驶,按顺序路上有若干个站点(X坐标值),crq的家也在道路旁某个位置h(X坐标值),现在crq想知道哪个站点下车离家最近. 输入 输入数据的第 ...

  9. (三)Host头攻击

    01 漏洞描述 为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段.例如,在php里用_SERVER["HTTP_HOST"].但是这个Host字段值是不可信赖的( ...

  10. 白嫖永久免费云服务器教程,永久免费虚拟主机、永久免费云数据库、搭建FTP服务器、服务器安装Linux / windows操作系统、服务器部署网站、宝塔一键部署多网站、独立ip、永久国内高速云服务器

    一.准备工作 1. 注册账号 声明:切记不可用服务器做违法的事情 申请地址:https://www.sanfengyun.com/ 图文教程地址:https://www.cnblogs.com/zwn ...