知识只有经过整理才能形成技能
整个章节分布简介请查看第一篇
内容目录
一、概述
二、解析委托知识点
1、委托本质
2、委托的使用
3、委托意义
逻辑解耦,减少重复代码
代码封装支持扩展
匿名方法和Lambda表达式
异步多线程
多播委托
三、事件
四、总结
一、概述
先说下委托,委托我们也经常用到。详尽了解委托是必要的,不然在异步多线程的编程中会一头雾水。委托本质就是一个类
,和我们平常定义的类没多大区别。只是这个类的作用的是描述一些方法,没有数据成员。一个委托定义了一类拥有同样返回类型和参数的方法规范
。委托的声明语法就是一个没有方法体的方法前面加上delegate
关键字。既然本质是一个类,那它就可以在任何可以定义普通类的位置来定义委托。委托是一个能把方法作为参数传递的对象
。
事件就简单了,事件就是委托的一个实例
。
二、解析委托知识点
1、委托本质。
在VS中编码中,声明委托后,会发现委托的着色提示和类时一样。
但好像不是很有说服力。高级语法都做了很好的封装,方便编码人员。.NET的二次编译,第一次编译成IL中间语言,中间语言也是一种编程语言,只是它不像高级语言那么方便人类阅读。我们可以通过一些工具(像ILSpy)反编译来窥探下它的内部逻辑。
如图中红框所示,我们定义的普通类MyDelegate和委托类型NoReturnPara(继承自MulticastDelegate)是一致的,都是class。在委托类型NoResultNoPara中也有.ctor(在IL中构造函数),此外还有我们以后会经常用到的Invoke方法和BeginInvoke、EndInvoke方法,前者是同步调用,后者是异步调用
。
2、委托的使用
我们使用委托一般就是三步走,第一步定义委托,第二部声明委托实例,第三部调用
。定义委托就像上面所示在一个没有方法体的方法前加上delegate关键字即可。它给定了一种约束,只能用规定的方法结构(返回值和参数)的实例化委托。