委托,事件,lambda,Linq 学习总结
1.委托是一个类,可以声明,实例化,调用方法;
2.事件是一个委托的实例+event关键字修饰,有安全限制
3.lambda是一个匿名方法,是一个语法糖;编译器会生成一个委托调用的方法;
4.ling where ,select,是基于委托的代码封装,把数据筛选的通用逻辑完成,把判断交给委托传递;基于委托封装,完成代码复用
委托delegate-event:ILSPY(C#--IL--二进制)
1.委托是一个类,可以声明,实例化,调用方法;
可以把方法包裹成变量,逻辑解耦,保存稳定
代码复用,保证项目规范
1.声明:public delegate void mydelegate();
2.实例化:mydelegate mdl=new mydelegate(this.nothing);
3.调用方法:mdl.Invoke();mdl.beginInvoke()'
4.多播委托:就像一个容器,可以放入指定标准的多个方法,可以指定移除,invoke按顺序调用,一一执行。
5.委托和事件的区别:委托是一个类,事件是一个委托的实例+event关键字修饰,有安全限制 ;
delegate T MyDele<T>(T a,T b);
static in Add(int x,int y){
return x +y;
}
MyDele<int> myde=new MyDele<int>(Add);
int a= myde(100,200)
return a;
lambda:
1..net framework3.0,是一个匿名方法,是一个语法糖;编译器会生成一个委托调用的方法;
2.不同的lambda 会被编译器生成不同的方法,即使长的一样也会生成不同的方法;
mydelegate mdl=new mydelegate(this.nothing);
mydelegate mdl=new mydelegate(delegate(string name){
return name;
});
mydelegate mdl=new mydelegate((string name) => {
return name;
});
//省略类型,编译器自动推算类型
mydelegate mdl=new mydelegate((name) => {
return name;
});
//如果只有一行,可以省略大括号分号;编译器提供的语法糖,编译器提供的省略功能;
mydelegate mdl=new mydelegate((name) =>
return name);
//可以省略new mydelegate
mydelegate mdl=(name) =>
return name);
Action,func 3.0内置的委托;
Action action=()=>Console.write(123); 0--16个参数的没有返回值的委托;
Action<string> act2=s=>{};
Fun<int> f=()=i=>i.tosting(); 0--16个参数的有返回值的委托;
c#6 开始
public string name=>"labmd";
public int id {get;set;}=123;
public string remark
{
get=>"test";
}
Ling:list.where(s=>s.id>100);
Expression:lambda还可以快速声明一个目录树;
Linq高级应用:ling where ,select,是基于委托的代码封装,把数据赛选的通用逻辑完成,把判断交给委托传递;基于委托封装,完成代码复用
把通用的逻辑写好,把可变的逻辑交给委托传递;
Linq to object: --IEnumerable--数据源在内存中-传递的委托判断;
Linq to sql: --数据源在数据库中--需求sql语句--从表达式目录树而来;
Linqtosql表达式目录树来传递和解读;
LinqtoXML
Linqto nosql
Linq to excel
lingq to cache
Linq to Everything
1.基于委托封装,完成代码复用
2.泛型满足不同类型需求
3.静态类+静态方法+第一个参数前加this --扩展方法改进写法:添加
4.IEnumerable迭代器升级,做到了按需获取,延迟加载,提高性能
List<Student> st=LinqExtend.ElevenWhere(studentList,student=>student.age>30);
//1.基于委托的封装,完成代码的复用
//2.泛型满足不同类型的诉求
pubic static List<Student> ElevenWhere(List<Student> studentlist,Func<Student,bool> func)
{
List<Student> sts=new List<Student>();
foreach(var student in studentList)
{
if(func.Invoke(student)){
sts.add(student);
}
}
return sts;
}
//2.泛型满足不同类型的诉求
pubic static List<T> ElevenWhere<T>(List<T> studentlist,Func<T,bool> func)
{
List<T> sts=new List<T>();
foreach(var student in studentList)
{
if(func.Invoke(student)){
sts.add(student);
}
}
return sts;
}
List<Student> st=LinqExtend.ElevenWhere(studentList,student=>student.age>30);
List<int> inlist=LinqExtend.ElevenWhere(intLists,i=>i>100);
//3.扩展方法改进写法:添加 this ,一次性获取所有
pubic static List<T> ElevenWhere<T>(this List<T> studentlist,Func<T,bool> func)
{
List<T> sts=new List<T>();
foreach(var student in studentList)
{
if(func.Invoke(student)){
sts.add(student);
}
}
return sts;
}
//4.迭代器升级:IEnumerable,按需获取用一个拿一个数据,节约性能
IEnumerable<Student> st=studentList.ElevenWhere(student=>student.age>30);
IEnumerable<int> inlist=intLists.ElevenWhere(i=>i>100);
pubic static IEnumerable<T> ElevenWhere<T>(IEnumerable List<T> studentlist,Func<T,bool> func)
{
foreach(var student in studentList)
{
if(func.Invoke(student)){
yieId return student;//sts.add(student);
}
}
}
https://www.bilibili.com/video/BV1rT4y1E7LW?p=11
相关文章
- datagridview中combobox类型的cell选中一个下拉列表之后,立即生效的事件
- 如何在Editor中监听Prefab修改后Auto Save的事件
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
- 【学习笔记44】JavaScript的事件传播
- DICOM:再次剖析fo-dicom中DicomService的自己定义事件绑定
- jQ1.5中的事件系统(低版本的事件系统)
- ExtJS--学习--window窗体属性--解决重复窗体事件---子组件的添加---工具条tbar
- 用户数据攻略-获取日历事件
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
- Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法
- Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)
- 微信小程序学习(三)事件
- 浏览器查看当前页面所有的监听事件
- 企业信息安全事件爆发式增长 年损失超百亿
- js 自定义事件
- 微信小程序学习第5天——页面导航(声明式与编程式导航)与页面事件(上拉与下拉刷新)
- Vue学习第16天——全局事件总线$bus的理解
- Jquery学习—jquery的事件
- SQL Server 扩展事件
- 为C#自定义控件添加自定义事件
- 学习旧岛小程序 (5) 自定义组件的自定义事件
- jQuery屏蔽浏览器的滚动事件,定义自己的滚轮事件