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

在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成员实现。

原文地址:http://www.infoq.com/cn/news/2016/06/csharp-mads-torgersen-qcon


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的不同进制输出,[DanoR][Java小码][进制转换::将double转换为不同进制后用String输出]...

功能简述进制转换输入: 一个数(double),目标进制(int)和小数的保留位数(int)输出: 相应进制的表示方式(String)参数说明double number; //将要被转换的数int ary; //目标进制int accuracy; //指定小数保留的位数特性支持小数转换例0: (5.20, 8, 4) --> 5.146314631463146315…

小菜:Java异常处理的10个最佳实践

转载自 小菜&#xff1a;Java异常处理的10个最佳实践异常处理在编写健壮的 Java 应用中扮演着非常重要的角色。异常处理并不是功能性需求&#xff0c;它需要优雅地处理任何错误情况&#xff0c;比如资源不可用、非法的输入、null 输入等等。Java 提供很多异常处理特性&#x…

JavaScript的正则表达式实现邮箱校验

说到html5&#xff0c;在说邮箱校验&#xff0c;聪明的人已经想到了直接写个 电子邮箱&#xff1a;<input type"email" name"email">这样不就是自动校验邮箱了么。。。。 不错&#xff0c;这样也可以&#xff0c;但是我要说的是&#xff1a;在没有…

微软说它深爱着Linux,现在它用行动证明了

6.27 清晨&#xff0c;微软在Red Hat DevNation大会上正式发布了.NET Core以及ASP.NET Core 1.0&#xff0c;并提供了下载&#xff0c;其不仅能在Windows操作系统上运行&#xff0c;还能在Linux和Mac OS X操作系统上运行&#xff0c;这意味着开发者不仅能使用它来建立自己的应用…

php file_put_contents(quot;,php file_put_contents函数怎么用?

file_put_contents()是PHP中的是一个内置函数&#xff0c;用于将字符串写入文件。用户想要写入的文件的路径和必须写入的数据作为参数传递给函数&#xff0c;并返回成功时写入文件的字节数&#xff0c;失败时返回FALSE。php file_put_contents()函数怎么用&#xff1f;php file…

jdk1.8.0_45源码解读——ArrayList的实现

转载自 jdk1.8.0_45源码解读——ArrayList的实现 一、ArrayList概述 ArrayList是List接口的可变数组的实现。实现了所有可选列表操作&#xff0c;并允许包括 null 在内的所有元素。除了实现 List 接口外&#xff0c;此类还提供一些方法来操作内部用来存储列表的数组的大小。  …

.NET Core dotnet 命令大全

dotnet 命令大全&#xff0c;让你理解dotnet 命令。 本文将以一个实例串起 dotnet 所有命令&#xff0c;让你玩转dotnet 命令。 本篇文章编写环境为windows 10 &#xff0c;dotnet 命令同样适用于其它系统。 配合 VS Code 你就可以在 Linux 、MAC 上开发.NET Core。 下面是dotn…

java异常 字节码,Java字节码角度分析异常处理

目录从字节码角度来分析&#xff1a;异常处理1.1 异常-catch// 从字节码角度来分析&#xff1a;异常处理public class T13_ByteAnalyseException {public static void main(String[] args) {int i 0;try {i 10;} catch (Exception e) {i 20;}}}注意&#xff1a;为了抓住重点…

html特效大全1

提前声明&#xff1a;好久之前的文档&#xff0c;找不着出处&#xff0c;如有侵权&#xff0c;联系本人&#xff0c;马上处理&#xff01; 1) 贴图&#xff1a;<imgsrc"图片地址"> 2)加入连接&#xff1a;<a href"所要连接的相关地址">写上你…

.Net Core 系列:1、环境搭建

前言&#xff1a; 2016年6月28日微软宣布发布 .NET Core 1.0、ASP.NET Core 1.0 和 Entity Framework Core 1.0。 .NET Core是微软在两年前发起的开源跨平台.NET框架项目&#xff0c;支持Windows、OS X和Linux平台&#xff0c;可用于开发各种类型的应用。此次发布包括了 .NET C…

【集合框架】JDK1.8源码分析之HashMap(一)

转载自 【集合框架】JDK1.8源码分析之HashMap&#xff08;一&#xff09;一、前言在分析jdk1.8后的HashMap源码时&#xff0c;发现网上好多分析都是基于之前的jdk&#xff0c;而Java8的HashMap对之前做了较大的优化&#xff0c;其中最重要的一个优化就是桶中的元素不再唯一按照…

java 连接 sql2005,java与sql server2005 连接有关问题

当前位置:我的异常网 Eclipse java与sql server2005 连接有关问题java与sql server2005 连接有关问题www.myexceptions.net 网友分享于&#xff1a;2013-01-27 浏览&#xff1a;73次java与sql server2005 连接问题package com.lzw.dao;import internalFrame.guanli.Item;imp…

微软借Bletchley项目将云计算信息加入区块链

在比特币领域大获成功后&#xff0c;越来越多的行业开始尝试通过区块链&#xff08;Blockchain&#xff09;技术在自己的业务中实施分布式分类帐&#xff08;Ledger&#xff09;。 InfoQ 什么是区块链 区块链是一种用于创建数字交易分类帐的数据结构&#xff0c;或有关某笔交易…

php定时某个时间循环做,PHP定时循环执行脚本

代码如下&#xff1a;<?php ignore_user_abort(); //关掉浏览器&#xff0c;PHP脚本也可以继续执行.set_time_limit(0); // 通过set_time_limit(0)可以让程序无限制的执行下去$interval 43200; // 每隔*秒运行&#xff0c;这里是12小时执行一次$is_send true;//是否开启t…

LinkedList 的实现原理浅析

转载自 LinkedList 的实现原理浅析 LinkedList内部结构 查看LinkedList的源码&#xff0c;发现其继承自AbstractSequentialList&#xff0c;实现了List&#xff0c;Deque&#xff0c;Cloneable以及Serializable接口&#xff0c;如&#xff1a; 也就意味着&#xff1a; Linked…

移植.NET Core计划,整合各平台变得更简单了!

在前篇文章中我提到了如何移植 .NET Core&#xff0c;并邀请使用者们不吝啬的回报您的使用经验和改进意见。 这项措施带动起了非常多使用者之间的讨论。 根据这些讨论的重点和我们与第一与第三方伙伴合作的经验&#xff0c;我们决定把核心 API 跟其他 .NET 平台&#xff0c;主要…

browserquest php安装,请问一下browserquest-php项目换成GatewayWorker的形式需要怎么部署worker...

单进程模式用户间数据容易共享browserquest本身就设计成单进程模式&#xff0c;单进程模式用户间数据容易共享&#xff0c;不用频繁的进程间通讯&#xff0c;开发简单。改成gateway网关模式利弊如果要改成多进程gateway网关模式&#xff0c;代码改动量会很大&#xff0c;要求开…

Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

转载自 Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列&#xff0c;相当于 动态数组。与Java中的数组相比&#xff0c;它的容量能动态增长。它继承于AbstractList&#xff0c;实现了List, Random…

ASP.NET Core 介绍

原文&#xff1a;Introduction to ASP.NET Core作者&#xff1a;Daniel Roth、Rick Anderson、Shaun Luttin翻译&#xff1a;江振宇(Kerry Jiang)校对&#xff1a;许登洋(Seay)、魏美娟(初见)、姚阿勇(Mr.Yao) ASP.NET Core 是对 ASP.NET 的一次意义重大的重构。本文介绍了 ASP…

计量经济学自相关matlab,计量经济学 自相关性.ppt

(3)检验自相关性 ①残差图分析&#xff1a;在方程窗口中点击Resids按钮&#xff0c;所显示的残差图(图5.3.7所示)表明e呈现有规律的波动&#xff0c;预示着可能存在自相关性。 图5.3.7 残差图 运用GENR生成序列E&#xff0c;观察E&#xff0c;E(-1)图形(见图5.3.8)。 图5.3.8 E…