C#各个版本特性

2018-11-20  本文已影响0人  OMG_1bcc

C#2.0
泛型:泛型可以帮助我们实现代码的重用,同时泛型的另一个好处——高性能,并且泛型类型也保证了类型安全
部分类型:Partial是局部类型的意思。允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。
匿名方法:匿名方法是在初始化委托时内联声明的方法。
迭代器:一个类型要能够使用foreach关键字来对其进行遍历必须实现IEnumerable或IEnumerable<T>接口。
可空类型:System.Nullable<T>,语法糖(?)。
Getter / setter单独可访问性
委托、接口的协变和逆变:委托是特殊的类,定义了方法的类型,可以将方法当做另一个方法的参数来进行传递,使得程序更容易扩展。
静态类:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化,仅包含静态成员,如果一个类下面的所有成员,都需要被共享,那么可以把这个类定义为静态类。

C#3.0
隐式类型局部变量
对象和收集初始化器
自动实现的属性
匿名类型
扩展方法
查询表达式 linq
Lambda 表达式:创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
表达树:Expression
部分方法:在部分类中定义部分方法,部分方法可以是静态的,但它们总是私有的,且不能有返回值,它们使用的任何参数都不能是out参数

C#4.0
动态绑定:Dynamic
命名和可选参数
泛型的协变和逆变:out指定该参数是协变,in指定该参数是逆变。
嵌入式互操作类型:是指一系列Com组件的程序集,是公共运行库中库文件,类似于编译好的类,接口。设定为true,实际上就是不引入互操作集(编译时候放弃Com程序集),仅编译用户代码的程序集。而设定为false的话,实际就是需要从互操作程序集中获取 COM 类型的类型信息

C#5.0
异步方法 await/async
调用方信息:CallerMemberName、CallerFilePath和CallerLineNumber。在编译器的配合下,分别可以获取到调用函数(准确讲应该是成员)名称,调用文件及调用行号。

C#6.0
自动属性初始化器
只读属性的默认值
空条件运算符,简洁检查
字符串插值
表达式方法体:例如 public int Skip => (PageIndex - 1) * PageSize;
public int Skip() => (PageIndex - 1) * PageSize;。
将静态类型成员导入命名空间
检查方法参数nameof表达式,在WPF中的ViewModel层的属性变化通知时常用。
带索引的对象初始化器
catch和finally 中使用await
内联out参数
无参数的结构体构造函数

C#7.0
out变量
元组:注意左右两边同时指定字段名称,会使用左边的字段名称覆盖右边的字段名称
解构
模式匹配:一、 is 表达式(条件控制语句(obj is type variable)),例如 (item is string str && int.TryParse(str, out var result)) // is expressions 和 out variables 结合使用;二、switch语句更新(case type variable2 when predicate),例如case string str when int.TryParse(str, out var result): // 类型模式匹配 + 条件表达式。
局部引用和引用返回:ref 关键字得到了加强,它不仅可以获取值类型的引用而且还可以获取某个变量(引用类型)的局部引用(static ref int GetLocalRef(int[,] arr, Func<int, bool> func);ref var num = ref GetLocalRef(arr, c => c == 20);num = 600;)。
局部函数
更多的表达式体成员
Throw 表达式
扩展异步返回类型:以前异步的返回类型必须是:Task、Task<T>、void,现在 C# 7 中新增了一种类型:ValueTask<T>。
数字文本语法的改进:二进制文字(以0b开头,字母不区分大小写)、数字分隔符(三个地方不能写:开头,结尾,小数点前后)。

C#7.1
default字面量
Async Main

C#7.2
条件Ref:ref var r = ref (arr != null ? ref arr[0]: ref otherArr[0]);
起始分隔符:可以用在0x0b之后
非尾部命名参数

上一篇 下一篇

猜你喜欢

热点阅读