前言
今天是16年的大年初一,闷头学习,收获很大,分清LINQ和Lambada,写得时候没那么迷茫了,懂了研究一种体系的时候需要注意新东西出现的目的、应用环境、本质、好处和缺点 —— [ 废话 ]
通过var、匿名对象、扩展方法、委托、匿名方法、Lambada来抛砖引玉引出LINQ —— [ 开干 ]
推断类型—var
机制:运行时推断数据类型
效率:和明确类型一样
环境:局部变量
好处:防止变量没有初始化
注意:初始化后无法更改数据类型
var num = 25;
var str = "2016年新年快乐";
var这种东西是弱类型,但这种概念不会根植在自己的脑海里
匿名对象
机制:编译器创建新的class
好处:1.封装 2.按需创建临时对象
环境:方法体内
var tempObj = new{Name = "pp",Age = 12};
小技巧例如PropertyGrid绑定个别属性
扩展方法
目的:为一种数据类型添加静态方法
委托
本质:编译器根据委托变量创建匿名对象
理解:一种特殊的数据类型
好处:动态的更迭签名相同的方法、广播、传递消息、做一些没有委托会很繁琐的事情(例如集合soft方法的排序实现方法)
public delegate void DelegateHandler(int num);
因为我有C++的底子,知道函数指针这玩意,可以把委托当做一种特殊的数据类型,那如果这样说,委托也有变量定义、赋值,不同的是赋值的是一个方法。
既然本质是编译器会产生一个匿名对象,就是一个class结构的实例化,那委托就可以像class一样可以有修饰符,代码可以写在class可以写的地方
匿名方法
目的:减少代码,降低复杂度
本质:虽然没有方法名,编译器仍然会给一个名字
效率:和普通方法调用相比,执行速度一样
语法 = delegate + 普通方法签名 - 函数名
DelegateHandler obj = delegate(int num){var s = num;};
Lambada
目的:减少代码,降低复杂度
本质:虽然没有方法名,编译器仍然会给一个名字
效率:和普通方法调用相比,执行速度一样
语法:匿名函数 -delegate关键字 - 参数类型(可减) - 参数所在的小括号(仅有一个参数时可减) - 方法体的花括号及return(方法体只有一行时可减)
DelegateHandler tempObj = a => {a = a-2;};
Linq
种类:Linq查询方法、Linq查询语句
目的:简化集合的查询
应用对象:集合
优点:查询也变得便利
执行:延迟执行
我尽可能简化的描述清楚:
-------Linq的查询方法---------
集合的查询可以使用集合带有的扩展方法来快速查询,
该些扩展方法就是Linq的查询方法,
Linq的查询方法参数是委托类型,
委托类型参数填充的是方法,
方法可以使用匿名方法简化,
匿名方法可以使用Lambada简化,
因此,集合的Linq查询方法中填充Lambada可以做到快速查询、降低复杂度等优点
-------Linq的查询语句---------
Linq可以写查询语句,
是Linq的另一种使用方法,
编译器不识别查询语句,
将语句转化为查询方法来查询