c#进化史 -尊龙游戏旗舰厅官网
从数据类型看c#演化
c# 1写的产品类
c# 强类型集合——解决限制1和2
c# 自动属性——解决限制3
c# 4 命名实参
c# 1~c# 4的演变历程
排序
c# 1——提供一个icomparer实现
c# 2——泛型比较器
c# 3——lambda表达式、扩展方法
c# 1~c# 3简化排序的历程
查询集合
c# 1——循环测试条件
c# 2——测试和打印分开
c# 3——移除委托逻辑的复杂包裹
c# 1~c# 3查询集合的演化
处理未知数据
处理可空值的方式
可选参数和默认值
小结
c# 3的重大改进——linq
查询表达式和进程内查询
查询xml
查询sql
c# 4的重大改进——互操作性(com和动态语言)
简化的com互操作
与动态语言互操作——dynamic
c# 5的重大改进——异步函数
c# 1可以看做是2001年java语言的升级版——额外的特性:语言特性的属性、委托和事件,foreach循环,using语句,显式方法重载,操作符重载,自定义值类型等。
从数据类型看c#演化
c# 1写的产品类
存在的三个限制:
c# 强类型集合——解决限制1和2
c# 自动属性——解决限制3
c# 3还提供了lambda表达式等特性。
c# 4 命名实参
非常不幸的是,对于需要只读属性,没有快捷方式。
c# 4增加了命名实参——当包含多个参数,参数类型相同,或某个参数为null时——使代码的含义更清楚。
c# 1~c# 4的演变历程
product类型的演变历程,展示了越来越好的封装性、越来越强的类型化以及越来越容易的初始化。
排序
按名称排序。
c# 1——提供一个icomparer实现
存在的限制:
c# 2——泛型比较器
c# 2不仅解决了限制2,还解决了限制1:
现在无需额外的比较器类了,而是创建一个委托实例。
c# 3——lambda表达式、扩展方法
lambda表达式简化了委托——无需delegate关键字,也无需指定参数类型。
扩展方法——为list提供了原本没有的排序方法。
c# 1~c# 3简化排序的历程
查询集合
找出最贵的产品。
c# 1——循环测试条件
foreach进行循环,用if测试条件,再显示产品。
c# 2——测试和打印分开
变量test的初始化使用了匿名方法,print变量的初始化使用了方法组转换。并不是上述代码比c# 1的代码简单,它只是鼓励你多做分解。下面是c# 2的另一个版本。
c# 3——移除委托逻辑的复杂包裹
c# 1~c# 3查询集合的演化
处理未知数据
处理可空值的方式
- c# 1有三种尊龙游戏旗舰厅官网的解决方案:
比如产品价格,decimal类型:
- c# 2引入可空类型,
c# 2引入nullable类型,甚至提供了一些语法糖decimal? price;。如此一来可以将null作为参数传递。
注意:可空类型和null进行比较,总是会返回false,因此,对于price > 10等价的!(price <= 10会得到错误的答案。
可选参数和默认值
对于方法的某些参数可能总是使用特定的值,传统的方式是使用方法重载。c# 4引入了可选参数来简化这一操作。——public product(string name, decimal? price = null)。
小结
c# 3的重大改进——linq
c# 2更像是对c# 1各种不足之处的修修补补,而c# 3几乎所有的特性都是为了构建linq。
查询表达式和进程内查询
上述代码使用了linq,如果不用反而更简单,但是在一些复杂情况下,换成方法调用来写,代码会变得难以阅读,这时linq就显得非常好用了。
linq借用了sql的语法和一些思路。但它可以从任意源(比如xml)获取数据。
查询xml
查询sql
为什么将所有数据从数据库拽回来,然后使用.net查询和排序?为什么不直接让数据库做它擅长的事?
事实上,这正是linq to sql所做的事——用c#代码表示查询,但却是作为sql来执行的。
c# 4的重大改进——互操作性(com和动态语言)
简化的com互操作
与动态语言互操作——dynamic
dynamic——它对c#编译器来说是一个类型,但clr并不认识它。下例展示与python代码进行交互。
动态类型可能会在执行时才暴露代码编写错误。
c# 5的重大改进——异步函数
windows forms中的线程有两条金科玉律:
使用异步函数:
来自为知笔记(wiz)
转载于:https://www.cnblogs.com/qianzi067/p/6019615.html
总结
- 上一篇:
- 下一篇: