万变不离其宗:中文释义:把事情托付给别人或别的机构(办理) 回调函数:即你 别人或机构(办理)数据回传给你
干什么事情我们需要了解为何这样做
列如 :面向过程和面向对象 为何要重写 ,重载,这么做的目的是什么? 一切为了提高效率,代码复用对不对。
为何要用委托: 即观察者和订阅者关系 允许我们将方法作为参数进行传递
委托的三部曲:
1.定义 pubulic delegate void XxxEventHandler(); pubulic string Xxx and 众所周知 {} 代表方法体 而定义委托仅为一个声明或者命令 用来存储某种Xx
2.使用 XxxEventHandler xx = new XxxEventHandler (被委托的方法); 哎哎哎 看到这是不是好熟悉 new关键字 new关键字不就三种用途嘛 那么委托是不是可以看作特殊的类
那么我们定义 就尽量和类平级 定义在外部
这就完了 ? 没有
事件:
还是老规矩 : 事件是什么 干嘛的?
点击事件 列子:网站 我们点击注册 触发 发给后台 后台人员一看 嗯 小伙子挺精致 通过 -----------你收到了通过的信息
老规矩:
pubulic delegate void XxxEventHandler(); 声明委托
public event XxxEventHandler Xxx; 声明事件
俩个不同的类或者窗体什么的 比如:公司和员工
委托了某人今天要辞退员工 声明了XX事件 在Xx事件下有个方法触发体 一旦达到某种条件就触发

是不是有类似 1. 公司发布人事 2. 人事通知你 3.你确定收到
想一想是不是类似通信啊 俩个窗体之间 对不对 一切迎刃而解 那我们就用到了委托 在我们使用事件的时候,必须要声明对应的委托,而触发事件,其实就是在使用委托链。
代码如下:


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Task { public class Company { public delegate void CompanyEventHander(); public event CompanyEventHander OnClick; public void issue() { //如果有人注册了这个事件,也就是这个事件不是空 if (OnClick != null) { Console.WriteLine(" 1.公司今天需要发布新的消息 Mrs你转告他辞退她"); OnClick(); } } } public class Mrs { public delegate void MrsEventHander(); public event MrsEventHander Onclick; public static void Receive() { Console.WriteLine("2.收到收到"); } public void issue() { if (Onclick != null) { Console.WriteLine("3.公司让我我转告你 今天需要把你辞退!"); Onclick(); } } } public class Mrc { public static void Receive() { Console.WriteLine("1.好吧! 咱们有缘再聚"); } } class Program { static void Main(string[] args) { Company company = new Company(); company.OnClick += new Company.CompanyEventHander(Mrs.Receive); company.issue(); Mrs mrs = new Mrs(); mrs.Onclick += Mrc.Receive; mrs.issue(); Console.ReadKey(); } } }
但,微软给我们了三个内置委托 绝大部分我们用这三个足以满足需求了
Action<T> Fun<T> Predicate<int> 如何使用 看返回值 使用
1.Action<T> :无返
2. Fun<T> :有返
3.Predicate<int> :Predicate有且只有一个参数,返回值固定为bool
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型
Func可以接受0个至16个传入参数,必须具有返回值
Action可以接受0个至16个传入参数,无返回值
Predicate只能接受一个传入参数,返回值为bool类型
看完写一下 就很好理解了 包括多态继承重写后面一一写
常见使用场景:窗体传值、线程启动时绑定方法、lambda表达式、异步等等。
当然 我比较菜 可能很多地方出错 麻烦大家指正 对不起了
















