C# 8.0的三个值得关注的新特性

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抛出一个警告,写的是不希望收到一个空字符串。事实上,原始代码可能有错误,所以级联警告可以帮助我们避免运行时错误。这是最有可能提高代码质量的语言变化。

 

新的轻量级类:Records

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。以下是其它一些 C# 8.0 新特性:

  • 提升扩展支持 – 这种提升不仅仅可以用于扩展方法,它还提供了对属性、静态方法和更多方面的支持。
  • 异步数据流 – 能够拥有支持异步操作的枚举值。包括新的 iasyncenumerable <T> 和 iasyncenumerator <T> 接口。
  • Async Disposable – iasyncdisposable 允许对象有一个异步的处理方法。

 

结论

过去几年中,.NET 的创新速度确实加快了。虽然 C# 8.0 目前还没有实现,但是它比起 C# 7.0,将带来很多有帮助的提升,让我们一起期待 C# 8.0 的早日到来。

原文链接:https://dzone.com/articles/3-new-c-8-features-we-are-excited-about

转载请注明出自:葡萄城控件

 

相关阅读:

【报表福利大放送】100余套报表模板免费下载

为什么你需要将代码迁移到ASP.NET Core 2.0?

是什么优化让 .NET Core 性能飙升?

C#开发人员应该知道的13件事

 

时间: 2024-09-20 00:16:01

C# 8.0的三个值得关注的新特性的相关文章

被微信封杀后 微软小冰三个值得关注的新动向

中介交易 SEO诊断 淘宝客 云主机 技术大厅 文/搜狐IT 刘瑞刚 微软做出了一个关注度极高的移动互联网产品-小冰智能机器人.不过,微软并没有高兴多久,原因是这个产品被微信封杀了.很多关心小冰的人在问:小冰是在坐以待毙还是谋求新的生路?小冰打算怎么改变自己的命运?小冰和微信还有和好的可能吗?如果和好,会以一种什么样的姿态重新出现? 锐观察走访了微软和腾讯公司的一些朋友,试图从中找到一些答案,现在将收集到的消息做了一个简单整理: 一,寻找微信替代品 这方面的报道已经有很多了,主要是网易易信和米聊

Android 5.0 Lollipop 新版本中那些值得关注的新功能

Android 5.0 Lollipop 新版本中那些值得关注的新功能 时间:2014-11-04 10:15 来源:PingWest 作者:光谱 Android,统治了全世界七成设备的操作系统--很可惜,并不是大一统,而是王子王孙群雄割据的状态--当然,今天我们讨论的不是统一和割据孰优孰劣的问题.除了美国进入冬令时之外,今天 Android 家族至少有一条重要消息值得关注:Google 自行开发的原生 Android 操作系统,也被誉为最纯净的 Android,将在美国时间 11 月 3 日正

Swift 2.0初探: 值得注意的新特性

转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不同的是,guard语句只会

【Hadoop Summit Tokyo 2016】Apache Hadoop 3.0 :YARN和MapReduce有什么新特性?

本讲义出自Junping Du在Hadoop Summit Tokyo 2016上的演讲,主要分享了在Apache Hadoop 3.0中YARN和MapReduce已经拥有和正在演进的新特性,并且对于Apache Hadoop 3.0 版本的时间轴进行了分享.

豆瓣的九点有三点值得关注

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现在对豆瓣依赖性是越来越大了,每天都要登陆一遍,在上面耗上20%的上网时间.我并非豆瓣的价值贡献者,书评影评歌评都很少写,偶然看到精彩的点评才会忍不住敲上那么几个字.那么我在豆瓣上玩什么呢.有几个人经常给我写豆邮,我们就靠豆邮交流.我在豆瓣上关注自己的好友动向,看他们的广播就像迷你博客一样.去小组转一圈即兴讨论.我的注意点从物转向了人,才开始

Fedora 25 Workstation值得关注的更新特性盘点

虽然比原计划有所延迟,Fedora 25 还是按时于延期日 11 月 22 日正式发布了.此次由 Red Hat 赞助的这一 Linux 发行版带来了许多新功能和更新,让 Fedora 25 成为了一个相当重要的版本,下面我们就对 Fedora 25 Workstation 的一些重要更新特性进行盘点介绍. Fedora 25 Workstation更新盘点 Fedora 25 Workstation 正式发布于 2016 年 11 月 22 日,其带来了一系列的更新和新功能,其中就包括:开箱即

Vine Linux 6.3 新版本发布,新特性值得关注

Vine Linux 6.3 发布,此版本代号为 Malartic-Lagraviere,值得关注的新特性: update the software collection; update Linux kernel to 3.4.106 (latest LTS kernel 3.4.y);  bundle newer software - Firefox 33.0, Thunderbird 24.0, Sylpheed 3.4.2, LibreOffice 4.3.5, OpenSSL 1.0.1

微信5.0值得关注的那些事 你知道几条呢?

在经历了关于微信5.0版本的种种猜想之后,8月5日,微信5.0ios版终于正式上线.新版的微信在功能上引入了街景.游戏中心.扫描英文翻译.扫描条形码报价.微信支付.表情商店等功能.受此影响,腾讯的股价也一路飙升,再创历史新高,昨日收盘价(370.8港元)也达到了腾讯2004年上市发行价的100倍.      从此次新版本的迭代 来看,微信的商业化步伐已表露无遗,游戏.街景.支付.表情商店,每一个都"钱景广阔",接下来就简单地说说. 街景     据了解,街景地图并不是腾讯的首创,早在2

Sql Server 2016新功能之Row-Level Security(值得关注)_MsSql

Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为过滤规则,使得拥有不同条件的用户(或者登录名) 之类的,只能获取到符合条件的数据.相对来说是提供了那么一点的便捷性,当然也增加了数据的安全性,相当于每个用户连接进来只能看到 符合规则的数据(当然,这里的用户只是一个举例.其实是可以通过编写过滤函数来实现的) 举个例子 有三个用户 Sales1 ,Sa