前言:本文给出一个从C#1.0到C#8.0的各个版本的主要C#特性
下面列出了在以前版本的 C# 语言和 Visual Studio.NET 中引入的主要功能。
1、C# 1.0 特性----第1个版本,编程语言最基础的特性,对应于Visual Studio .NET 2002
- Classes:面向对象特性,支持类类型
- Structs:结构
- Interfaces:接口
- Events:事件
- Properties:属性,类的成员,提供访问字段的灵活方法
- Delegates:委托,一种引用类型,表示对具有特定参数列表和返回类型的方法的引用
- Expressions,Statements,Operators:表达式、语句、操作符
- Attributes:特性,为程序代码添加元数据或声明性信息,运行时,通过反射可以访问特性信息
- Literals:字面值(或理解为常量值),区别常量,常量是和变量相对的
(1)C# 1.1 ,一个小版本的更新,对应于Visual Studio .NET 2003
#line
杂注和 xml 文档注释。
2、C# 2特性 (VS 2005)
- Generics:泛型
- Partial types:分部类型,可以将类、结构、接口等类型定义拆分到多个文件中
- Anonymous methods:匿名方法
- Iterators:迭代器
- Nullable types:可以为Null的类型,该类可以是其它值或者null
- Getter/setter separate accessibility:属性访问控制
- Method group conversions (delegates):方法组转换,可以将声明委托代表一组方法,隐式调用
- Co- and Contra-variance for delegates and interfaces:委托、接口的协变和逆变
- Static classes:静态类
- Delegate inference:委托推断,允许将方法名直接赋给委托变量
3、C# 3特性 (VS 2008)
- Implicitly typed local variables:
- Object and collection initializers:对象和集合初始化器
- Auto-Implemented properties:自动属性,自动生成属性方法,声明更简洁
- Anonymous types:匿名类型
- Extension methods:扩展方法
- Query expressions:查询表达式
- Lambda expression:Lambda表达式
- Expression trees:表达式树,以树形数据结构表示代码,是一种新数据类型
- Partial methods:部分方法
- 本地
var
类型推理- 语言集成查询 (LINQ)
4、C# 4特性 (VS 2010)
- Dynamic binding:动态绑定
- Named and optional arguments:命名参数和可选参数
- Generic co- and contravariance:泛型的协变和逆变
- 命名自变量
- Embedded interop types (“NoPIA”):开启嵌入类型信息,增加引用COM组件程序的中立性
5、C# 5特性 (VS 2012)
- Asynchronous methods(async await):异步方法
- Caller info attributes:调用方信息特性,调用时访问调用者的信息
(1)中间有一个小的更新,Visual Studio .NET 2013:
- 此版本的 Visual Studio 包含 .NET Compiler Platform(“Roslyn”)的 Bug 修复、性能改进和技术预览,Roslyn 是 .NET Compiler Platform SDK 的前身。
6、C# 6特征 (VS 2015,.Net Core1.0)
- Compiler-as-a-service (Roslyn)
- Import of static type members into namespace:支持仅导入类中的静态成员
- Exception filters:异常过滤器
- Await in catch/finally blocks:支持在catch/finally语句块使用await语句
- Auto property initializers:自动属性初始化
- Default values for getter-only properties:设置只读属性的默认值
- Expression-bodied members:支持以表达式为主体的成员方法和只读属性
- Null propagator (null-conditional operator, succinct null checking):Null条件操作符
- String interpolation:字符串插值,产生特定格式字符串的新方法
- nameof operator:nameof操作符,返回方法、属性、变量的名称
- 只读自动属性
- 自动属性初始化表达式
- Expression-bodied 函数成员
- using static
- Null 条件运算符
- 字符串内插
- 异常筛选器
nameof
表达式- Catch 和 Finally 块中的 Await
- 使用索引器初始化关联集合
- 集合初始值设定项中的扩展
Add
方法- 改进了重载解析
- Dictionary initializer:字典初始化
7、C# 7 特征 (Visual Studio 2017,.Net Core 1.0)
Out variables:out变量直接声明,例如可以out in parameter
- Pattern matching:模式匹配,根据对象类型或者其它属性实现方法派发
- Tuples:元组
- Deconstruction:元组解析
- Discards:没有命名的变量,只是占位,后面代码不需要使用其值
- Local Functions:局部函数
- Binary Literals:二进制字面量
- Digit Separators:数字分隔符
- Ref returns and locals:引用返回值和局部变量
- Generalized async return types:async中使用泛型返回类型
- More expression-bodied members:允许构造器、解析器、属性可以使用表达式作为body
- Throw expressions:Throw可以在表达式中使用
out
变量- 元组
- 弃元
- 模式匹配
ref
局部变量和返回结果- 本地函数
- 更多的 expression-bodied 成员
throw
表达式- 通用的异步返回类型
- 数字文本语法改进
(1)C# 7.1 特征 (Visual Studio 2017 version 15.3,.NET Core 2.0)
- Async main:在main方法用async方式,即async main方法
- Default expressions:引入新的字面值default
- Reference assemblies:
- Inferred tuple element names:推断元组元素名称
- Pattern-matching with generics:泛型的类型参数模式匹配
- 编译器有
-refout
和-refonly
两个选项,可用于控制引用程序集生成。
(2)C# 7.2 特征 (Visual Studio 2017 version 15.5,.NET Core 2.0)
(3)C# 7.3 特征 (Visual Studio 2017 version 15.7,.NET Core 2.1)
C# 7.3 版本有两个主要主题。 第一个主题提供使安全代码的性能与不安全代码的性能一样好的功能。 第二个主题提供对现有功能的增量改进。 此外,在此版本中添加了新的编译器选项。
以下新增功能支持使安全代码获得更好的性能的主题:
- 无需固定即可访问固定的字段。
- 可以重新分配
ref
本地变量。- 可以使用
stackalloc
数组上的初始值设定项。- 可以对支持模式的任何类型使用
fixed
语句。- 可以使用其他泛型约束。
对现有功能进行了以下增强:
- 可以使用元组类型测试
==
和!=
。- 可以在多个位置使用表达式变量。
- 可以将属性附加到自动实现的属性的支持字段。
- 由
in
区分的参数的方法解析得到了改进。- 重载解析的多义情况现在变得更少。
新的编译器选项为:
-publicsign
,用于启用程序集的开放源代码软件 (OSS) 签名。-pathmap
用于提供源目录的映射。
8、C#8.0 (VS 2019 , .NET Core 3.0)
持续更新中... ...
注意:
从C# 7.0开始,随着 .NET Core的不断成熟,我们可以自己安装一个工具,自己查看某一个版本的语言的最新特性。
- 安装 dotnet-try 全局工具。
- 克隆 dotnet/try-samples 存储库。
- 将当前目录设置为 try-samples 存储库的 csharp8 子目录 。
- 运行
dotnet try
。
参考地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/