AICon 北京站 Keynote 亮点揭秘,想了解 Agent 智能体来就对了! 了解详情
写点什么

Mads Torgersen 介绍 C# 7 及后续版本新特性

  • 2016-06-28
  • 本文字数:1188 字

    阅读完需:约 4 分钟

QCon 纽约 2016 大会上,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<(int sum, int count)> Method()
// Dictionary 使用元组作为键
var dict = new Dictionary<(string first, string last), person>();

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

C# 7 后续版本特性

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

复制代码
// 使用 C# 7 模式匹配
if (O is Point p && p.X == 5) { WriteLine($"Y: {p.Y}")}
// 使用未来版本的替代语法处理相同的场景
if (o is Point X {var x, Y: var y} && 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 成员实现。

查看英文原文: C# 7 and Beyond with Mads Torgersen

2016-06-28 19:002422
用户头像

发布了 1008 篇内容, 共 420.8 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

科普达人丨一文弄懂什么是云计算?

阿里云弹性计算

云计算 阿里云 虚拟化 神龙架构 IT资源利用

【Python技能树共建】动态渲染页面爬取

梦想橡皮擦

Python 7月月更

wallys/Qualcomm IPQ8072A networking SBC supports dual 10GbE, WiFi 6

wallys-wifi6

IPQ8072 IPQ9072a

基于鲲鹏原生安全,打造安全可信的计算平台

极客天地

决策树算法

秃头小苏

决策树 7月月更

为租客提供帮助

源字节1号

微信小程序 软件开发 前端开发 后端开发 租房小程序

Android 面试知识点

沃德

android 程序员 7月月更

【LeetCode】 解密消息Java题解

Albert

LeetCode 7月月更

iOS基础--属性(setter方法 、getter方法、点语法、@property)

NewBoy

前端 移动端 iOS 知识体系 7月月更

LeetCode-144. 二叉树的前序遍历(java)

bug菌

Leet Code 7月月更

开发一个小程序商城需要多少钱?

CRMEB

Scala 基础 (六):面向对象(下篇)

百思不得小赵

scala 大数据 7月月更

自律,提升自制力原来也有方法

沃德

程序员 7月月更

Qt 实现容器的DELETE的方式

小肉球

qt 7月月更

Qt|多个窗口共有一个提示框类

中国好公民st

qt 7月月更

盘点JS判断空对象的几大方法

猪痞恶霸

前端 js 7月月更

系统入门-Linux系统基础命令

Albert Edison

7月月更

简单介绍一下闭包及它的一些应用场景

是乃德也是Ned

7月月更

java零基础入门-Java正则表达式

喵手

Java 7月月更

关于 Web Content-Security-Policy Directive 通过 meta 元素指定的一些测试用例

汪子熙

JavaScript 前端开发 CSP meta 7月月更

风靡B站的《看漫画学Python》到底是什么来头?

博文视点Broadview

electron添加SQLite数据库

空城机

sqlite Electron 7月月更

千人规模互联网公司研发效能成功之路

laofo

互联网 DevOps 研发效能 工程效率

Android自定义TextView实现高度和宽度,解决字体适配问题

芝麻粒儿

Android Studio TextView 7月月更

如何参与开源项目 - 细说 GitHub 上的 PR 全过程

胡说云原生

GitHub 开源 pull request DevStream

【玩转 RT-Thread】 RT-Thread Studio —— 按键控制电机正反转、蜂鸣器

攻城狮杰森

OS 7月月更 RT-Thread

Vue 灰度发布新功能的那些事

南城FE

Vue 前端 灰度发布 7月月更

Python|正则表达式

AXYZdong

Python 7月月更

基于华为云IOT设计智能称重系统(STM32)

DS小龙哥

7月月更

如何在博客中添加Aplayer音乐播放器

echeverra

前端

Mads Torgersen介绍C# 7及后续版本新特性_.NET_Pierre-Luc Maheu_InfoQ精选文章