C#笔记整理_委托

初入博客 
序言

今天算是我刚刚正式的开始系统性的整理.Net,对于一个尝试想成为高级.Net软件工程师的我,路途还有一点迷茫, 只能先整理一下.Net的基础知识外,我都不知道如何进阶成为一个高级程序员,应该学习哪些知识,且先行,走之看之把!

.Net 委托 学习
什么是委托?
 委托是一种特殊的类型(class),用途是来实现对一种方法的封装。在某种事件发生时,自动 调用该方 法。好处显然易见,它使用户可以自定义自己的方法实现,通过封装,CLR会在相应事件激发时调用你定义的方法,实现你的功能
委托是由什么构成的?
委托实列=>
1 .声明一个委托类型   delegate int AddDel(int a,int b);
2.创建一个委托对象并且传入一个满足委托类型约束条件的函数
AddDel del=new AddDel(AddstaticFunc);
委托的内部分为三个层次
1._methodPtr(方法指针) 用来指向的方法的内存地址
2._target (目标对象) 及传入的方法,若传入为静态方法时,为空
3.委托链 ==>就是一个委托数组,可以方便后面的委托+=,实现多播委托
什么是多播委托?且多播委托是如何插入的?插入后假如每一样个委托都有返回值,多播委托后,取一个返回值会取哪些?
1.多播委托就是当我们创建一个委托以后,遇到一个相同类型的方法想要调用这个类型的委托的时候,我们可以不用再New一个新的委托的对象,而直接在上一个创建的委托对象中+=然后传入需要调用的方法,这样,委托链上的数组就会按照顺序添加了一个新的委托元素。
3.多播委托拿到委托返回值最后一个指向的方法的执行结果,也就是只会取最后一个委托的返回值
多播委托实列==>基于上面的委托
del+=new AddDel(AddStaticFunc);

什么是泛型委托
泛型委托的实列==>
FuncfuncDemo=new Func(AddstaticFunc);
Action ActionDemo=new  Action(Addstatic Action);
这两个泛型委托的差别是Func最后一个int(类型)始终代表返回值而Action是没有返回值的
且Func<前面可以有16个类型*(每个类型用“,”隔开),一个返回类型>
泛型委托不同于普通委托,它的约束条件可以用任意类型(T)代替,而且不用声明委托
什么是匿名方法?
前面说的泛型的方法总觉的还是太麻烦了,需要传入一个函数,那可不可以将这个函数写在委托里面呢?当然可以,于是就出现了匿名方法
匿名方法实列==>FuncfuncDemo=delegate(int a,int b)=>{return a+b;};
在后面的地方直接用delegate模拟一个函数,签名是两个Int类型,返回了a+b的值,这样就直接把一个方法的内容放到了委托后面
什么是Lambda语句
在上述的匿名方法中 ,再省去delegate就构成了我们的Lambda表达式
Lambda语句实列==>FuncfuncDemo=(int a,int b)=>{return a+b;};
什么是Lambda表达式
在上述的Lambda语句语句中 将return和{}给省略,把最后的方法体变成一个表达式,就变成一个Lambda表达式
Lambda表达式实列==>FuncfuncDemo=(int a,int b)=>a+b;自动返回表达式    
而在Lambda表达式中=后面括号里面的类型也可以省略,可以直接变成
FuncfuncDemo=(a,b)=>a+b;
当=后面的括号里面的类型只有一个时,那么括号可以不写
FuncfuncDemo=a=>a+b;

猜你喜欢

转载自www.cnblogs.com/JokerTycoon/p/9906054.html