1.C#语言发展史
本部分简单介绍从C#1到C#5各个版本的语言新特性,
1.简单的数据类型
我们先使用C#1编写一个Product类,如下图所示
C#2 中的强类型集合(泛型)
C#3 自动实现属性和简化初始化
C#4 命名参数
以上就是Product类从C#1到C#4的演变历程总结如下:
2.排序和过滤
排序功能
下面我们将使用按名称对Product对象进行排序,来展示对排序的改进。
C#1中的排序
C#2 中的排序(引入了泛型)
C# 3中的排序(Lambda表达式)
下面总结一下在排序的过程中C#1-C#3过程中的演变历程
3.列表查询
下面要展示的是查询出Product列表中price>250的所有商品
C#1的查询
C#1中存在问题:C#1 中存在强制类型转换,使用if循环判断
C#2中的查询(引入泛型避免强制类型转换)
使用if判断不专业,C#2中可以使用委托,并且将打印和查询分开
在将上面的代码进行优化,如下所示,但是委托看起来依然很繁琐
C#3 使用Lamdba表达式进行优化
总结
4.处理未知数据
可空类型
处理未知数据的场景:如果在数据库中Product类中的price对象值可以为null,但是在对象中它是值类型,值类型不能为null。
在C#1中处理方式有三种:
1.围绕decimal创建一个引用类型的包装器
2.维护一个bool类型值,表示他是否为null
3.使用"魔数"来表示一个未知的价格
C#2中使用.Net 2.0提供的 可空类型 Nullable<T>结构,并提供语法糖简化工作
readonly decimal? price;
可选参数和默认值
在C#1、C#2、C#3中如果不想对外提供所有的方法参数就必须使用方法的重载。
但是在C#4中引入了 "可选参数"
5.Linq简介
Linq是C#3的核心,Linq是关于查询的,其目的是使用一致的语法和特性,以一种易阅读、可组合的方式,使对多数据源的查询变得简单。
查询表达式
数据源为对象的List
例如:查询单价大于100的商品名称和供货商名称
Var是在程序编译时根据结果推断所需的类型,类型推断
查询xml
数据源为xml文件
Linq to Sql
数据源为数据库时其写法类似于基于对象的list,以后再详细讲解。
6.com和动态类型
C#4 中最为重要的是互操作,其中包括两大主题对旧的com技术的处理和映入dynamic
com:Component Object Model,C#4中简化Com互操作,支持索引器
动态类型dynamic:一个新的类型,对于C#编译器是一个类型,CLR根本不识别,用于更动态语言进行交互。
7.异步代码
C#5的的特性:异步函数,可以使用异步函数来中断代码的执行,而不阻塞线程。
async: async 其实就是一个标记,标记这个方法是异步方法。当方法被标记为一个异步方法时,那么其方法中必须要使用await关键字。
await:
8..net平台简介