前言
C#是微软公司在2000年6月发布的一种新的编程语言,主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行。
C#最初有个更酷的名字,叫做COOL。微软从1998年12月开始了COOL项目,直到2000年2月,COOL被正式更名为C#。
在1998年,Delphi语言的设计者安德斯·海尔斯伯格带领着Microsoft公司的开发团队,开始了第一个版本C#语言的设计。在2000年9月,国际信息和通信系统标准化组织为C#语言定义了一个Microsoft公司建议的标准。最终C#语言在2001年得以正式发布。
1.C# 1.0
发布于2002年1月
和 Visual Studio .NET 2002 一起发布的 C# 版本 1.0 非常像 Java。其目标是成为一种“简单、现代、通用的面向对象的语言”。当时,看起来像 Java 意味着它实现了早期的设计目标。
不过如果现在回顾 C# 1.0,你会觉得有点晕。 它没有习以为常的内置异步功能和以泛型为中心的巧妙功能。 其实它完全不具备泛型。LINQ尚不可用。 这些新增内容需 要几年才能推出。
与现在的 C# 相比,C# 1.0 版少了很多功能。 你会发现自己的代码很冗长。 不过凡事总要有个开始。 在 Windows 平台上,C# 1.0 版是 Java 的一个可行的替代之选。
2.C# 1.2
发布于2003年4月
随 Visual Studio .NET 2003 一起提供的 C# 版本 1.2。 它对语言做了一些小改进。 最值得注意的是,从此版本开始,当 IEnumerator 实现 IDisposable 时,foreach 循环中生成的代码会在 IEnumerator上调用 Dispose。
3.C# 2.0
发布于2005年11月
C# 2.0 新增了泛型、分部类型、匿名方法、可为null的值类型、迭代器、协变和逆变、getter/setter 单独可访问性、方法组转换(委托)、静态类、委托推断等。
虽然 C# 一开始是通用的面向对象 (OO) 语言,但 C# 2.0 版很快改变了这一点。 通过泛型,类型和方法可以操作任意类型,同时保持类型安全性。
C# 2.0 版引入了迭代器。 简单来说,迭代器允许使用 foreach 循环来检查 List (或其他可枚举类型)中的所有项。 拥有迭代器是该语言最重要的一部分,显著提升了语言的可读性以及人们推出代码的能力。
4.C# 3.0
发布于2007年11月
C# 3.0 版和 Visual Studio 2008 一起发布于 2007 年下半年,但完整的语言功能是在 .NETFramework 3.5 版中发布的。 此版本标示着 C# 发展过程中的重大更改。 C# 成为了真正强大的编程语言。
此 C# 版本的杀手锏功能是查询表达式,也就是语言集成查询 (LINQ)。 LINQ 的构造可以建立在更细微的视图检查表达式树、Lambda 表达式以及匿名类型的基础上。 不过无论如何 C# 3.0 都提出了革命性的概念。 C# 3.0 开始为 C# 转变为面向对象/函数式混合语言奠定基础。
5.C# 4.0
发布于2010年4月
C# 4.0 版随 Visual Studio 2010 一起发布,主要功能是引入 dynamic 关键字。通过使用 dynamic 关键字,可以创建和动态类型语言(例如JavaScript)类似的构造。
6.C# 5.0
发布于2012年8月
C# 版本 5.0 随 Visual Studio 2012 一起发布,是该语言有针对性的一个版本。 对此版本中所做的几乎所有工作都归入另一个突破性语言概念:适用于异步编程的 async 和await 模型。
7.C# 6.0
发布于2015年7月
版本 6.0 随 Visual Studio 2015 一起发布,发布了很多使得 C# 编程更有效率的小功能:静态导入、异常筛选器、自动属性初始化表达式、字符串内插、nameOf运算符、索引初始化表达式、Catch/Finally 块中的 Await、仅限 getter 属性的默认值。
发布了 Roslyn 编译器即服务。
8.C# 7.0
发布于2017年3月
C# 7.0 版已与 Visual Studio 2017 一起发布。 此版本继承和发展了 C# 6.0。缩减了使用 out 关键字的变量声明,并通过元组实现了多个返回值。
9.C# 7.1
发布于2017年8月
此版本增加了语言版本选择配置元素、三个新的语言功能和新的编译器行为。
此版本中新增的语言功能包括:
asyncMain 方法:应用程序的入口点可以含有 async 修饰符。
default 文本表达式:在可以推断目标类型的情况下,可在默认值表达式中使用默认文本表达式。
推断元组元素名称:在许多情况下,可通过元组初始化来推断元组元素的名称。
泛型类型参数的模式匹配:可以对类型为泛型类型参数的变量使用模式匹配表达式。
最后,编译器有 -refout 和 -refonly 两个选项,可用于控制引用程序集生成。
10.C# 7.2
发布于2017年11月
11.C# 7.3
发布于2018年5月
12.C# 8.0
发布于2019年9月
C# 8.0 版是专门面向 .NET C# Core 的第一个主要 C# 版本。 一些功能依赖于新的公共语言运行时 (CLR) 功能,而其他功能则依赖于仅在 .NET Core 中添加的库类型。
13.C# 9.0
发布于2020年11月
C# 9 随 .NET 5 一起发布。 它是面向 .NET 5 版本的任何程序集的默认语言版本。它包含以下新功能和增强功能:记录、顶级语句、模式匹配增强:关系模式和逻辑模式等。
C# 9 版本继续致力于让 C# 成为一种新式通用编程语言。 功能继续支持新式工作负载和应用程序类型。
14.C# 10.0
发布于2021年11月
15.C# 11.0
发布于2022年11月
16.C# 12.0
发布于2023年11月
C# 12 中增加了以下功能:
- 主构造函数: 现在可以在任何
class
和struct
中创建主构造函数。 主构造函数不再局限于record
类型。 - 集合表达式: 一种用于指定集合表达式的新语法,包括展开运算符 ( .. ),可展开任何集合。
- 内联数组: 使用内联数组,你可以创建固定大小的 struct 类型数组。
- Lambda 表达式中的可选参数: 可以为 Lambda 表达式的参数定义默认值。
- ref readonly 参数: ref readonly 参数可以让可能使用 ref 参数或 in 参数的 API 更清晰。
- 创建任何类型的别名: 可以使用 using 别名指令创建任何类型的别名,而不仅仅是命名类型。
- 试验性属性: 指示试验性功能。
- 拦截器: 已作为预览功能发布。
总体而言,C# 12 提供的新功能可让你更高效地编写 C# 代码。 你已经知道的语法可以在更多地方使用。 其他语法可实现相关概念的一致性。
17.C# 13.0(目前最新版)
发布于2024年11月
C# 13 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 预览版 SDK 尝试这些功能。
- 新的转义序列 - \e:可以使用 \e 作为 ESCAPE 字符 Unicode U+001B 的字符文本转义序列。
- 方法组自然类型改进:此功能对涉及方法组的重载解析进行了少量优化。
- 对象初始值设定项中的隐式索引器访问:对象初始值设定项表达式中现在允许隐式“从末尾开始”索引运算符 ^ 。
在 C# 13 之前的版本中,不能在对象初始值设定项中使用 ^
运算符。