C#各大版本特性
C#10.0
支持全局using语句:现在可以在整个项目中使用全局using语句,在所有文件中自动引用命名空间,不需要在每个文件中都添加using语句。
支持拓展枚举:现在可以为枚举类型添加新的成员,而不需要修改枚举定义。
支持零长度数组初始化:现在可以初始化长度为零的数组。
默认参数支持字段初始化器:现在可以在默认参数的声明中使用字段初始化器。
异步异常过滤器:现在可以在异步方法中使用异常过滤器,用于捕获和处理异常。
改进的模式匹配:现在可以使用更复杂的模式匹配语法,包括对类型模式的支持。
支持函数指针:现在可以声明和使用函数指针,用于更灵活地处理函数的传递和调用。
C#9.0
Top-level statements:现在可以在不需要类和命名空间的情况下写代码,简化了程序入口点的编写。
对Record类型的改进:引入了record类型,使得创建不可变的数据类型更加简单,自动生成的Equals、GetHashCode、ToString和Deconstruct方法。
初始化表达式的简化:可以直接在对象的初始化中使用lambda表达式。
改进的模式匹配:引入了新的模式匹配功能,让模式匹配更加强大和灵活。
增强的异步编程:引入了新的异步流(Streams)和异步的Dispose方法。
对异步方法的改进:可以使用Async Method Builder模式创建自己的异步方法。
C#8.0
nullable 引用类型:引入了可空引用类型,可以更好地处理空引用异常。
switch 表达式:扩展了 switch 语句,可以在表达式中使用,使得代码更简洁。
引入异步流(Async Streams):可以使用 async 和 yield 关键字来实现异步流。
默认接口成员:接口可以有默认的实现,避免了需要实现所有接口成员的问题。
C#7.0
对元组(Tuples)的支持:可以将多个值封装为元组,并且使用分解(Deconstruction)来将元组解构为多个变量。
正则表达式命名组:可以给正则表达式中的组命名,以便更好地理解和使用。
模式匹配的增强:引入了新的模式匹配功能,包括类型模式和常量模式。
引入了本地函数:可以在方法内部定义局部函数,方便代码的组织和重用。
C#6.0
引入了用于字符串插值的$符号:可以在字符串中直接插入变量和表达式,使得代码更易读。
引入了自动属性初始值设定项:可以在属性的声明中直接指定初始值。
表达式体成员:可以使用表达式体来定义成员方法、属性、索引器和构造函数。
Null-条件运算符:引入了?.运算符,可以更方便地处理可能为空的对象。
字符串格式化的改进:引入了新的字符串格式化语法,更加简洁和直观。
C#5.0
对异步编程的改进:引入了async和await关键字,简化异步操作的编写。
引入了对动态类型的支持:可以使用dynamic关键字定义动态类型,更灵活地处理运行时类型。
引入了对命名参数的支持:可以在调用方法时使用命名参数,提高代码的可读性。
引入了对可选参数的支持:可以在方法的声明中指定参数的默认值,简化方法的重载。
C#4.0
动态类型:引入了dynamic关键字,可以在编译时不确定类型,而是在运行时确定。
命名参数:可以指定方法参数的名称,使得代码更加清晰易读。
可选参数:可以为方法的参数指定默认值,简化了方法的使用。
具名参数:可以按照参数的名称来指定参数的值,提高代码的可读性。
C#3.0
隐式类型(var):可以使用var关键字来隐式声明变量的类型。
支持对象初始化器:可以在创建对象的同时为对象的属性赋值。
支持集合初始化器:可以在创建集合的同时初始化集合的元素。
扩展方法:可以为现有的类型添加新的方法,无需修改原始类型的定义。
C#2.0
泛型:引入了泛型类型和方法,提供了更好的类型安全性和代码重用性。
迭代器:引入了迭代器(iterator)和yield关键字,简化了枚举和遍历集合的过程。
匿名方法:可以创建没有名字的方法,可以作为委托的实例或者Lambda表达式的一部分。
可空类型:可以声明可为空的值类型,避免了null引用异常。
改进的委托语法:引入了委托的简化语法,使得委托的使用更加简单。