C# 语言是在2000颁布的,至今已正式颁布了7个版本,每个版本都包罗了许多令人兴奋的新特性和成果更新。同时,C# 每个版本的颁布都与同时期的 Visual Studio 以及 .NET 运行时版本高度耦合,这也有助于开发者更好的学习掌握 C#,并将其与 Visual Studio 以及 .NET 的使用结合起来。
加快C#版本的颁布速度在被称为“新微软”的敦促下,微软创新的步骤也加快了。为了做到加快步骤,微软开发部门将一些过去集成在一起的技术此刻都疏散了出来。
Visual Studio、.NET Framework、.NET 运行时、编译器和编译运行时的运行语言都被拆分本钱身的包和版本,这意味着以上每一个都可以凭据本身的节奏颁布了。此刻,我们已经看到了这种模式的告成。.NET Core 2.0 的事情已经完成了,并从 Visual Studio 颁布出来,同时也增加了对 Linux 的撑持。几乎与 .NET Core 2 颁布的同时,C# 7.1 版本也颁布了。
C# 7.1 是一个重要的颁布版本,虽然新成果不久不多,但它倒是 C# 第7个大版本的开始。C# 7.2 版本的事情已经展开了,同时也在打算着 C# 7.3 版本。尽管 C# 8.0 版本还有点远,但是微软技术人员已经对 C# 8.0 版本的特性有了一些想法。
语言设计的讨论是果然的,围绕 C# 8.0 版本新特性的问题部分也进行了广泛的讨论。查抄每个刊行版本的里程碑,同时也为未来的 C# 路线图做好评估。
下面正式开始介绍 C# 8.0 版本中令人兴奋的三个新特性。
非空和可空的引用类型C# 有两大变量类型:根基类型和引用类型。原先的类型是 int、char 和 double。这些类型都不能接受 null 值。在不分配新值的情况下,创建一个新的 int 值,会导致 int 值为 0 而不是 null。C# 2.0 介绍了带有“?”标记的变量原语的可空版本。因此,int?是 int 的一个版本,它可以接受空值。
另一方面,引用类型(如字符串这样的东西)始终能够接受 null 值,并将 null 作为默认值。这也带了来一个错误谬误,就是可能导致应用措施中带入空引用。
在 C# 8.0 中,将引用类型设为非空,成为了一个可选的特性。
为C #引入这样的特性是很困难的,因为这为原本已经运行很好的代码,引入了潜在的编译错误。因此需要做的是,创建此成果的要领,而不是为开发人员带来无法估计的事情量。
按照设计方案,C# 团队决定采纳一个允许开发者可以选择可空引用类型的要领。这将是一个工程级另外设定,以便启用对可空引用的验证。一旦启用,可接受 null 值的东西就需要使用?运算符进行声明。
如下代码:
String s = null; Console.Write(s);这将引起警告,因为字符串不能接受空值。因此需要以下代码:
String? s = null; Console.Write(s);然而,上面代码也会在Console抛出一个警告,写的是不但愿收到一个空字符串。事实上,原始代码可能有错误,所以级联警告可以辅佐我们制止运行时错误。这是最有可能提高代码质量的语言变革。
新的轻量级类:RecordsC # 8.0 的一个很棒的新特性,是有一种新方法来创建一个被称为 records 的类。这个类素质上是一个非常轻量级的类,,是一个字段调集,能够辅佐快速创建 POCO 类型的东西,同时也可以解决对照东西是否相等时的关键问题。
例如,为银行帐户创建 record 类型:
class BankAccount(Guid Id, string Name, decimal Balance)这是一种创建简单类的很好的要领。
用 records 解决东西相等问题
在 C# 编程中,一个最难掌握的内容就是,将==运算符用于引用类型和原语之间的区别。
为了举例说明,我们使用==比拟两个整数:
int I = 1;int j = 1; i == j //yields true原语的值是相等的。但是,对付引用类型,却不相等。
Object I = new Object(); Object j = new Object(); i == j //yields false这是因为 C# 的引用类型对照会考虑引用相等,也就是说,只有当两个东西是同一个东西才相等。records 类型供给了布局上的相等,等同于相等运算符。创建新 record 的语法非常简洁,因为生成的东西是简单的数据传输东西。