乐趣区

关于c#:C语言特性及发展史

本文依照 C#语言的倒退历史,介绍 C#每个版本的新增个性,次要参考微软官网文档。理解这些语言个性能够帮忙咱们更高效的编写 C# 代码。

C# 1.0

与 Visual Studio .NET 2002 一起公布,该版本的 C# 十分像 Java。

  • 构造
  • 接口
  • 事件
  • 属性
  • 委托
  • 运算符和表达式
  • 语句
  • 个性:无效地将元数据或申明信息与代码相关联,从而在运行时应用反射查问个性

C# 1.2

随 Visual Studio .NET 2003 一起公布,次要是一些小改良。值得注意的是,从此版本开始,当 IEnumerator 实现 IDisposable 时,foreach 循环中生成的代码会在 IEnumerator 上调用 Dispose。

C# 2.0

与 Visual Studio 2005 一起公布。自 2.0 开始,C# 打好了根底,开始谋求解决一些重大影响开发者的难点。

  • 泛型:应用泛型优于创立派生自 ArrayList 的 ListInt 或强制转换形式
  • partial class
  • 匿名办法:delegate 运算符创立一个能够转换为委托类型的匿名办法。从 C# 3.0 开始,可应用 lambda 表达式创立匿名办法。
  • 可空类型:可空类型 T? 示意其根底类型 T 的所有值及额定的 null 值。
  • 迭代器:容许应用 foreach 来查看 List(或其它可枚举类型)中的所有项
  • 协变和逆变:实现数组类型、委托类型和泛型类型参数的隐式援用转换

C# 3.0

与 Visual Studio 2008 一起公布,但残缺性能是在.NET Framework 3.5 版本中公布的。此版本标记着 C# 倒退过程中的重大更改。

  • 主动实现的属性:C# 6 及更高版本可像字段一样对其初始化
  • 匿名类型
  • 查问表达式
  • lambda 表达式
  • 表达式树
  • 扩大办法:无需创立派生类、从新编译或其它形式即可向现有类型增加办法
  • var
  • partial method:partial class 的一部分定义签名,一部分定义实现
  • 对象汇合初始化语法:new 后应用 {} 进行初始化

C# 4.0

随 Visual Studio 2010 一起公布。

  • 动静绑定:dynamic 关键字
  • 命名参数 / 可选参数:命名参数指定参数实参,不需匹配参数列表地位
  • 泛型协变和逆变
  • 嵌入互操作类型:CLR 反对将 COM 类型信息间接嵌入到托管程序集中,不要求托管程序集从互操作程序集中获取 COM 类型的类型信息,弛缓了部署难点

C# 5.0

随 Visual Studio 2012 一起公布,次要工作是实用于异步编程的 async 和 await 模型。

  • 异步成员:语言级别的异步编程模型,外围是 Task 和 Task<T> 对象,承受关键字 async 和 await 的反对
  • 调用方信息个性

C# 6.0

随 Visual Studio 2015 一起公布。

  • 动态导入:using static 指令
  • when:用于 catch 语句和 switch 语句
  • 主动属性初始化表达式:属性的 get/set 拜访器可应用 => 简化语法
  • => 运算符
  • Null 流传器:仅当操作数的计算结果为非 null 时,null 条件运算符才会将成员拜访 ?. 或元素拜访 ?[] 运算利用于其操作数,否则返回 null
  • 字符串内插:$特殊字符将字符串文本标识为内插字符串
  • nameof 运算符

C# 7.0

与 Visual Studio 2017 一起公布。

  • out 变量:能够在办法调用的参数列表中申明 out 变量,无需独自编写申明语句
  • 元组和析构函数:能够创立蕴含多个公共字段的轻量级未命名类型
  • 模式匹配:反对 is 表达式和 switch 表达式。is 模式表达式可在一条指令调配后果:input is int count
  • 本地函数:实用于迭代器办法和异步办法,在办法外部申明办法
  • 扩大 expression bodied 成员:可在属性、索引器、结构、析构、get/set 拜访器应用=>
  • ref 局部变量和返回后果
  • throw 表达式:throw 可作为表达式而不是语句

C# 7.1 7.2 7.3

此版本开始 C# 能够单点发行,编译器有 -refout-refonly两个选项,可用于管制援用程序集生成。

  • async Main 办法:可在 Main 办法中应用 await 关键字
  • default 文本表达式
  • 启用更高效的平安代码
  • private protected 拜访修饰符
  • 条件 ref 表达式:条件表达式 ?: 的援用而不是值
  • 无需固定即可拜访固定的字段
  • 能够重新分配 ref 本地变量
  • 能够应用 stackalloc 数组上的初始值设定项
  • 能够对反对模式的任何类型应用 fixed 语句
  • 能够应用其余泛型束缚

C# 8.0

专门面向.NET Core 的第一个次要 C# 版本。

  • readonly 成员:可将 readonly 修饰符用于 struct 成员
  • 默认接口办法:可将成员增加到接口并提供实现
  • 模式匹配加强性能:在更多地位应用,联合 switch 表达式(不是 switch 语句),可用于属性模式、元组模式、地位模式
  • using 申明:带 using 关键字的变量申明,批示编译器在关闭范畴的开端解决变量
  • 动态本地函数
  • 可处理的 ref 构造
  • 可空援用类型
  • 异步流:创立并以异步形式应用流
  • 索引和范畴:为拜访序列中的单个或范畴元素提供了简洁语法。依赖两个新运算符:开端运算符 ^ 和范畴运算符..
  • null 合并赋值:仅当左操作数为 null 时,能力应用 ??= 运算符将右操作数赋给左操作数
  • 非托管构造类型
  • 嵌套表达式中的 stackalloc
  • 内插逐字字符串的加强性能:$@ 程序可任意安顿

C# 9.0

.NET 5.0 反对 C# 9.0

  • record 类型:不可变的援用类型,应用值语义实现相等性
  • 仅限 init 的资源库:可为属性和索引器创立 init 拜访器而非 set 拜访器,结构完变为只读
  • 顶级语句:应用程序中只有一个文件可应用顶级语句
  • 模式匹配加强性能:and/or/not,如if (e is not null) ...
  • 性能和互操作性
  • 调整和实现性能:如在 new 表达式中省略类型:private List<int> nums = new();
  • 反对代码生成器
退出移动版