![C# 7.1、7.2特性追踪](../../upload/2017_11/17110608327424.png)
作为Visual Studio 15.3的一部分,微软发布了自.NET 1.1以来C#的第一个单点版本。C# 7.1提供了三个新特性,其中有两个是成功有效的。
C# 7.1/7.2:default字面量
default
字面量旨在减少一些样板代码。下面是一个常见的例子:
这多少有点啰嗦,因此,模仿Visual Basic的Nothing
关键字,上述代码可以写成下面这样:
这行代码可以按照预期方式运行。但是,当使用一个可空的值类型时,问题就来了。
这行代码应该把limit
参数置为空,但在C# 7.1中,它实际返回0。
这个问题的修复计划在C# 7.2中进行,该版本会随Visual Studio 15.5一起发布。
C# 7.1:元组名称推断
自从引入了匿名类型,C#就可以隐式命名属性。例如,在下面这行代码中,对象y
会拥有名为A
和B
的属性。
在C# 7.1中,值元组也具有这个特性。
要了解更多有关元组名称推断的信息,请看下我们之前的报道。
C# 7.1:Async Main
这里没有多少可说的。Main函数现在可以异步执行,这减少了之前需要编写的一些样板代码。
C# 7.2:条件Ref
C#的条件操作符通常被称为“三元运算符”,因为这是这门语言中的唯一一个。C# 7.2将会提供第二个三元操作符,名为条件Ref操作符。
这个小特性让开发人员可以在条件中使用ref
表达式。下面是提案中的一个例子:
注意,除了在靠近两种可能结果的地方需要使用ref
关键字外,在包含整个表达式的括号外也需要使用ref
关键字。
C# 7.2:起始分隔符
该特性扩展了在数值字面量中使用下划线的能力。下面的示例摘自提案:
C# 7.2:非尾部命名参数
C#中的命名参数服务于两种目的:
该特性处理第二种情况。例如:
除非开发人员记住了函数签名,否则很难一眼就看出了true
和false
对应什么。过去,开发人员可以写成下面这样:
但是,如果对maxRecords
参数没有疑问却还需要指定似乎就有点奇怪。在非尾部命名参数提案中,开发人员可以根据需要指定参数。
编者注:当清晰度成为问题时,Enum
仍然好于Boolean
。
C# 7.2:Private Protected
C#有5个访问级别:private
、internal
、protected
、protected
或internal
、public
。但是,CLR还有第六个访问级别,名为FamANDAssem
,“允许程序集中的子类型访问”。
冷知识:在CLR中,protected
称为family
,而internal
称为assembly
。
借助新关键字“private protected
”,开发人员可以使用CLR的FamANDAssem
标识了。Private Protected提案说明了这样做的重要性:
C# 7.2:只读引用
我们之前报道过只读引用,所以这里没什么新东西要介绍。本质上讲,只读引用只是为了说明开发人员希望通过引用传递结构从而获得性能收益,而不是真正改变值的能力。
目前,只读引用提案尚处于原型阶段,还没有实现。
ref-like类型编译时安全强化[7.2提案]
放弃的特性
以下特性没有被标记为7.2提案的一部分。虽然这不是说一定不会标记,但可能不会很快发生。
查看英文原文: Catching up with C# 7.1 and C# 7.2