[空白_录音] 嗨,你好,下面呢我们一起来学习一下
C# 语言的新特性 C# 语言呢,在不同的版本呢它做了不同的改进
一个是呢 C# 2.0 里面呢引入了泛型,3.0 里面呢
引入了 Lambda 表达式及 Linq,4.0 里面呢引入了动态特性
那 5.0 呢,就是并行和异步 6.0 呢,改进了这个编译的
API 并且呢对一些属性呢等等初始化呢,做了一些改进
下面呢,把其中的几个重点呢给看一下 2.0 当中呢,引入的泛型
这个有点像 C++ 里面的模板一样,就是它写同样一个类,可以针对不同的类型
最常见的呢就是在集合里面,比如说列表,我们可以是 各种对象的列表,这里是
Book 的列表 它的好处呢,就是不用像以前那样呢就是把
所有的对象都当做 object,强制类型转换 它更好的呢,表示的类型的安全。
在 2.0 里面呢,以及呢到后面的 4.0 以上呢,它针对这些
delegate 也增加了泛型,比如说 Func 能表示呢多个参数,然后带一个结果的这样的一种
delegate 还有 Action,那么表示返回 Void 这样的一些
delegate 还有像谓词表示条件,还有表示呢比较的,Comparison
还有表示呢转换的等等,像事件处理器呢
它也有一个泛型,这样我们就不用对每一个事件呢再去定义一个类了 所以就方便我们的使用。
在2.0里面呢,还提供了匿名方法,匿名方法呢 就是用一个
delegate,对这个函数呢不取名字 用一个 delegate
来表明呢它是个匿名的方法,它可以带参数,用一个方法体 当然,还有带 0
个参数的这个 delegate,像这个 Thread,我们可以呢就不用单独写个方法 就可以写一个匿名方法。
那么这些匿名方法都可以 隐式地转换为一个相容的、 兼容的委托类型
在 C# 3.0 当中呢,更是增加了 Lambda 表达式
Lambda 表达式呢,它其实呢是匿名函数的简写
它用一个箭头,也就是一个等于加一个大于号来表示的 3.0 当中呢也增加了
Linq,这个 Linq 呢实际上呢 又是这个查询的更强的简写
那常见的形式呢,就是 from c in 一个集合里头
然后呢加 where 条件,orderby 按什么排序,再
select,就选择什么样的属性 形成对象的一个集合。
那其实呢,它就相当于 .Where 这个方法,然后呢里面有一个
Lambda 表达式 然后 Orderby 呢,也是有一个 Lambda
表达式,也就是相当于它形成了一个 delegate。
那更多的 Linq 可以参见微软给的一些例子,Linq
101 那之所以能实现这个呢,是在 C# 里头呢它实现了一种所谓的扩展方法
这个扩展方法呢,它是在一个 static 这样的类里头 有一些
static 的方法,这个 static 方法呢比较特殊 它带一个用
this 来修饰的这样一个参数,一个类型的一个参数
它就是为了对这样一个 string 就是对这个参数类型呢,扩展方法。
那么这个扩展方法在 使用的时候,比如说我们有一个 string
这样的对象,然后用了这种扩展方法以后呢 使得这个 string
呢就多了这样一个我们刚才定义的这样一个方法。
所以呢 它给我们的一种机制,使得我们对原先的类呢
表面上也是增加了许多方法,而我们没有重新呢继承这个类 或者重写这个类。
在 4.0 里面呢,主要增加了 动态特性,这就是用个关键词
dynamic 来表示的 它可以表示呢任意的对象
在编译器呢是不会进行这种语法的检查,比如说我们这里有一个对象,dynamic
那这个对象呢,它具有的属性,它的一些方法
等等,那么这些呢它都是可以进行呢扩展,在我们用的时候呢
编译器呢它并不检查这样一个类型 它里面具体
.Name 有没有,.Speak有没有,所以它实际上呢
就加了一种动态的特性,有点像 Javascript 里面一样,我们任意扩展我们要的对象
加这个特点呢,主要用于一些 COM 组件的一些交互。
比如说我们操纵 Excel 单元格 那我们就可以呢有这样,dynamic
这样的对象,我们可以直接 对这个对象的一些赋值,比如说它里面的公式,Formula
等于什么什么 那 C# 5.0 里面呢,主要提供了异步编程
这个关键词呢,就是异步和等待 那么这种方法呢,它要求呢
返回一个 Task 这样的一个方法 这样的 Task
方法呢,它是可以用 await 来等待 然后呢如果我们用了 await
呢,这样的方法呢,就要标明它是异步 那这样的好处就是把我们传统的、
特别复杂的 异步,这种回调,它就用这样的一种,用
await 这样的方式呢 就可以表示了。
所以大大地简化了这个异步编程 更多的这些例子呢,看我们讲多线程及异步编程那里边
另外在 C# 里面对并行编程呢也进行了进一步加强
一个是 Parallel 类,那么它可以呢 Invoke,同时呢并行地调用一系列的方法 也可以用 For
循环,或者 ForEach 那么针对、 针对这样的数字和这样的列表,来并行地调用一些方法
另外呢,对于 Linq 的扩展,就叫 PLinq,也叫并行的 Linq
我们只需要在传统的这个 Linq 的基础之上呢,加个
AsParallel 就可以呢,把这些任务呢,变成一种并行执行的任务
所以呢,它的功能相当地强 在
C# 6.0,C# 6.0 呢还没有完全出来,但 C# 6.0
里面呢 要增加一些方法,比如说这个初始化更方便了,比如说这里
我们可以定义个属性,直接它有个默认值,那就是 Mr.
这样的 我们也可以呢,定义一些属性呢直接把这个,把那个
Lambda 表达式呢用到这个地方 直接用这样的方式呢,表示
return 20,或者一个方法 也可以呢直接用这个
Lambda 表达式来写 这样呢我们写起来就更简洁了。
总的来说呢 C# 呢在越来越发展,它的表达功能呢越来越强大 书写起来也越来越简便