C# 语言是在2000发布的,至今已正式发布了7个版本,每一个版本都包含了许多使人兴奋的新特性和功能更新。同时,C# 每一个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高度耦合,这也有助于开发者更好的学习掌握 C#,并将其与 Visual Studio 以及 .NET 的使用结合起来。编程
在被称为“新微软”的推进下,微软创新的步伐也加快了。为了作到加快步伐,微软开发部门将一些过去集成在一块儿的技术如今都分离了出来。异步
Visual Studio、.NET Framework、.NET 运行时、编译器和编译运行时的运行语言都被拆分红本身的包和版本,这意味着以上每个均可以按照本身的节奏发布了。如今,咱们已经看到了这种模式的成功。.NET Core 2.0 的工做已经完成了,并从 Visual Studio 发布出来,同时也增长了对 Linux 的支持。几乎与 .NET Core 2 发布的同时,C# 7.1 版本也发布了。async
C# 7.1 是一个重要的发布版本,虽然新功能很少,但它倒是 C# 第7个大版本的开始。C# 7.2 版本的工做已经展开了,同时也在计划着 C# 7.3 版本。尽管 C# 8.0 版本还有点远,可是微软技术人员已经对 C# 8.0 版本的特性有了一些想法。ide
语言设计的讨论是公开的,围绕 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 #引入这样的特性是很困难的,由于这为本来已经运行很好的代码,引入了潜在的编译错误。所以须要作的是,建立此功能的方法,而不是为开发人员带来没法估量的工做量。ui
根据设计方案,C# 团队决定采起一个容许开发者能够选择可空引用类型的方法。这将是一个工程级别的设定,以便启用对可空引用的验证。一旦启用,可接受 null 值的对象就须要使用?运算符进行声明。
以下代码:
String s = null; Console.Write(s);
这将引发警告,由于字符串不能接受空值。所以须要如下代码:
String? s = null; Console.Write(s);
然而,上面代码也会在Console抛出一个警告,写的是不但愿收到一个空字符串。事实上,原始代码可能有错误,因此级联警告能够帮助咱们避免运行时错误。这是最有可能提升代码质量的语言变化。
C # 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 的语法很是简洁,由于生成的对象是简单的数据传输对象。
Records 是一个轻量级对象,使用起来很是方便。虽然 Records 不是语言的一个突破性的变化,但也是一个渐进的改进,值得欢迎。
版本控制接口可能会使人懊恼, 由于它要求接口上的新方法来实现接口上的全部对象。随着新方法添加到了接口中,实现它们的任务就落在了实现接口的各个类中。由于各个实现没必要须共有同一个父类,添加到接口的方法就能够在各自的类中实现。
默认接口实现容许在接口中指定一个实现,只要它是接口上现有方法的函数实现的。下面再以银行账户为例:
public interface IBankAccountManager{ void PerformTransaction(decimal amount, string reason); }
如今为了便于使用,咱们想在银行帐户上提供明确的借方和信誉功能。一般咱们会为接口添加这些功能并在全部的类中实现它们。
public interface IBankAccountManager{ void PerformTransaction(decimal amount, string reason); void PerformDebit(decimal amount, string reason){ PerformTransaction(-1 * amount, $”Debit: {reason}”); } void PerformCredit(decimal amount, string reason){ PerformTransaction(amount, $”Credit: {reason}”); } }
默认接口实现提供了一种强大的新方法来扩展实现接口的类,而无需重复代码。只需听从默认实现,许多接口的类的实现就能够获得大大简化。
正是由于这些新特性,才让咱们绝不怀疑这就是 C# 8.0。如下是其它一些 C# 8.0 新特性:
提高扩展支持 – 这种提高不只仅能够用于扩展方法,它还提供了对属性、静态方法和更多方面的支持。
异步数据流 – 可以拥有支持异步操做的枚举值。包括新的 iasyncenumerable <T> 和 iasyncenumerator <T> 接口。
Async Disposable – iasyncdisposable 容许对象有一个异步的处理方法。
ComponentOne Studio Enterprise 是一款专一于企业应用的 .NET 全功能控件套包,支持 WinForms、WPF、UWP、ASP.NET MVC 等多个平台,帮助您在缩减成本的同时,提早交付丰富的桌面、Web 和移动企业应用。控件支持的范围普遍,包含了表格和数据管理、图表和数据可视化、流行的UI界面等,为企业应用开发提供高性能的控件工具。
过去几年中,.NET 的创新速度确实加快了。虽然 C# 8.0 目前尚未实现,可是它比起 C# 7.0,将带来不少有帮助的提高,让咱们一块儿期待 C# 8.0 的早日到来。
原文连接:https://dzone.com/articles/3-new-c-8-features-we-are-excited-about
转载请注明出自:葡萄城控件
葡萄城成立于1980年,是全球最大的控件提供商,世界领先的企业应用定制工具、企业报表和商业智能解决方案提供商,为超过75%的全球财富500强企业提供服务。葡萄城于1988年在中国设立研发中心,在全球化产品的研发过程当中,不断适应中国市场的本地需求,并为软件企业和各行业的信息化提供优秀的软件工具和咨询服务。