什么是委托?

什么是指针?
C语言阐述:(图一:直接调用 图二:指针用法)

一切皆地址 √
无论是数据还是算法,皆保存在内存中,变量是寻找数据的地址,函数时寻找算法的地址
直接调用 和 间接调用
直接调用:通过函数名调用函数
间接调用:通过函数指针调用函数
委托的简单使用
Action和Func委托 实例
委托,其实就是函数指针的升级版。完成间接调用。

class Program{static void Main(string[] args){Calculator cal = new Calculator();Action action = new Action(cal.Report);//Action委托指向cal.Report这个方法cal.Report();//直接调用action.Invoke();//间接调用(简便写法:action();)//Func<in T1,in T2,out TResult> 等价于 Func<参数1,参数2,返回值类型>Func<int, int,int> func1 = new Func<int, int,int>(cal.Add);Func<int, int, int> func2 = new Func<int, int, int>(cal.Sub);int result1 = func1.Invoke(1,2);int result2 = func2.Invoke(1, 2);Console.WriteLine(result1);Console.WriteLine(result2);//无参数用Action委托;有参数用Func委托}}class Calculator{public void Report(){Console.WriteLine("I have 3 methods");}public int Add(int a, int b){int result = a + b;return result;}public int Sub(int a, int b){int result = a - b;return result;}}
委托的声明(自定义委托)

委托是一种类!!!
委托必须和封装的方法保持“类型兼容”!!!
public delegate double Calc(double x, double y);//声明自定义委托类型class Program{static void Main(string[] args){Calculator calculator = new Calculator();//创建类实例Calc cal = new Calc(calculator.Add);//创建自定义委托cal += calculator.Sub;//给自定义委托 添加 委托方法cal(100,200);//或者 cal.Invoke(100, 200);}}class Calculator{ //以下的方法类型都兼容(double , double)public double Add(double a, double b){Console.WriteLine(a + b);return a + b;}public double Sub(double a, double b){Console.WriteLine(a - b);return a - b;}}
委托的使用
委托的一般使用
模板方法:
优点: ①最大限度地实现代码的重复使用。
回调方法:
切勿滥用!!!
老师的反面案例:非常非常乱!
委托的高级使用
多播委托
单播委托 案例
一个委托封装一个方法的形式
多播委托 案例
一个委托封装多个方法的形式
隐式异步调用
同步 与 异步 的概念:
同步:你做完了我接着做… 异步:咱们两个同时做…
同步调用 与 异步调用 的概念:
①每一个运行的程序是一个进程;每个进程可以由一个或多个线程。 ②同步调用是在同一线程内。即单线程内进行串行调用…
③异步调用的底层机理是多线程。即多线程内进行并行调用…
同步调用 与 异步调用
举例案例基础类:
直接同步调用 案例:

间接同步调用 案例:
常用于单播/多播委托…(该处使用多播委托)


隐式异步调用 案例:
常常在使用线程是会形成冲突,我们常常为其“加锁”解决问题。
适时使用接口(interface)取代委托的使用
案例如下:







③异步调用的底层机理是多线程。即多线程内进行并行调用…






