博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mads Torgersen介绍C# 7及后续版本新特性
阅读量:6677 次
发布时间:2019-06-25

本文共 1741 字,大约阅读时间需要 5 分钟。

在上,C#项目经理Mads Torgersen介绍了即将到来的C# 7。他还简单地阐述了C#的演化过程,并展示了部分正在开发的未来版本特性。

\\

近年来,云和分布式系统的出现使开发人员面临着新的挑战。开发人员需要进步,语言也要随之进步。像C#这样一门多用途语言,其演化需要平衡不同的方面:

\\
  • 改善 vs 保持简单 \\
  • 改善现有开发 vs 吸引新用户 \\
  • 采用新范式 vs 忠于C#的OOP精神 \

近年来,.Net整体上也经历了重大的变化:

\\
  • 支持Windows、Mac OS和Linux(.Net Core) \\
  • 部署系统 \\
  • 编译成本地代码(.NET Native) \\
  • 开源编译器和公共Roslyn API \\
  • 多编辑器选择(由OmniSharp和Roslyn促成) \\
  • 开源框架、编辑器和工具 \

C# 7

\\

C# 7将随Visual Studio 15交付,后者目前是以预览版的形式提供。为了加快新语言特性的推出速度,他们正在讨论点版本发布。这样,语言特性会包含在小版本中。此举的目的在于,一旦新特性开发完成,早期采用者就可以选择激活各种新特性。

\\

C# 7将包含元组。从一个方法返回多个值变得更简单:

\\
static (int sum, int count) Method()\{\    return (0, 0)\}\// 调用方法并使用结果\var result = Method();\Console.WriteLine($\"Sum:{result.sum}.Count: {result.count}.\");\
\\

元组还可以用在泛型类型中。元组是值类型,也就是说,它们是在栈上分配内存,而不是堆上。这可能会提高性能,比如减少关键代码路径中的垃圾收集开销。

\\
// 异步方法返回元组\static async Task\u0026lt;(int sum, int count)\u0026gt; Method()\\// Dictionary使用元组作为键\var dict = new Dictionary\u0026lt;(string first, string last), person\u0026gt;();\
\\

招致了模式匹配特性将整体删除的传言。C# 7还会包含模式匹配特性,未来版本还会进行增强。

\\

C# 7后续版本特性

\\

有多项特性目前正在开发之中,将会包含在C#的下一个版本中。为了提供一种简单的方式处理某些场景,更多的模式匹配语义也正在探索之中:

\\
// 使用C# 7模式匹配\if (O is Point p \u0026amp;\u0026amp; p.X == 5) { WriteLine($\"Y: {p.Y}\")}\\// 使用未来版本的替代语法处理相同的场景\if (o is Point X {var x, Y: var y} \u0026amp;\u0026amp; x == 5) { WriteLine($\"Y: {y}\")}\\if (o is Point { X : 5, Y: var y}) { WriteLine($\"Y: {y}\")}\\if (o is Point(5, var y)) { WriteLine($\"Y: {y}\")}\
\\

可空引用类型的实现正在进行当中。当前的思路是,当编译器检测到null值的不合理使用时就发出警告:

\\
string? n;\string s;\\n = null; // 好的,可空\s = null; // 警告,不应该为空\s = n; // 警告\\WriteLine(s.Length); // 一定不为空\WriteLine(n.Length) // 警告!可能为空\
\\

不可变值类型Record是另一项正在开发中的特性。不可变让并发环境数据分享更安全,让程序更容易推断。Record类型提供了一种在C#中使用不可变性的简洁方式。Record有默认值语义,就是说提供了开箱即用的getter、GetHashCode、equality成员实现。

\\

查看英文原文:

转载地址:http://kegxo.baihongyu.com/

你可能感兴趣的文章
caffe环境配置2
查看>>
我的软件工程课目标
查看>>
var a={n:1}; var b=a; a.x=a={n:2}; console.log(a.x); console.log(b.x);
查看>>
【HDOJ】3016 Man Down
查看>>
window.open打开新页面,并将本页数据用过url传递到打开的页面;需要两个页面;...
查看>>
查看本机IP分为两种情况:
查看>>
Scala进阶之路-Scala特征类与unapply反向抽取
查看>>
洛谷P3057 [USACO12NOV]远处的牧场Distant Pastures
查看>>
hdu3415 Max Sum of Max-K-sub-sequence 单调队列
查看>>
6421B Lab2 DHCP的配置及故障排除
查看>>
[C# 基础知识梳理系列]专题一:深入解析委托——C#中为什么要引入委托
查看>>
FOSCommentBundle功能包:其它添加评论到页面的方法
查看>>
SQL Server 2012笔记分享-17:理解并设置文件表(FileTable)
查看>>
MongoDB运行状态、性能监控与分析
查看>>
Exchange 2016共享邮箱不保存已发送邮件的问题
查看>>
[C#基础知识系列]全面解析C#中静态与非静态
查看>>
SQL Server 2012笔记分享-40:自动维护索引
查看>>
Nginx实战基础篇三 Nginx上虚拟主机的实现过程
查看>>
百度SiteApp开始清理未备案的网站
查看>>
Lync Server 2013 实战系列之五:标准版-定义拓扑生成器
查看>>