17611538698
webmaster@21cto.com

C# 11 新特性:包括通用数学、必需的类成员及原始字符串文本

资讯 0 1313 2022-08-25 09:24:26


背景


微软 .NET Conf 大会刚刚于8月初结束。


现如今的.NET6 平台已形成了一个统一的生态系统:底层统一,生态与开发者工具链越发完善。


从2014年11月12日开始,微软宣布.NET正式开源,从此这个平台已经可以在Windows、Linux以及macOS等环境下安装和运行,包括云原生、桌面、移动应用、大数据、机器学习、游戏以及物联网等领域的软件和系统研发。


C#11 新亮点


C# 语言设计师 Mads Torgersen 在此次 .NET 大会上展示了 C# 11 的部分亮点,这些新特性将在 11 月份随新版本的 .NET 7.0 同时发布。


Torgersen 挑选了即将发布的版本的三大特性:通用数学、必需的类成员和原始字符串文本。


图片

 Mads Torgersen 演示 C# 之原始字符串文本特性


至此,.NET 每年都会发布一个新版本。


Torgersen 在会上向开发者们宣布, .NET 7.0 马上将成为当前版本,它会支持 18 个月。


下一个长期支持 (LTS) 版本将是 .NET 8.0,按计划预计在 2023 年 11 月份发布。


三个重要新特性


Torgersen 的演讲大部分都在围绕 .NET 接口中静态抽象成员的复杂性,在文档中描述为“定义包括可重载运算符、其它静态成员以及静态属性的接口……此功能的主要场景是可应用泛型类型的数学运算符。” 


Torgersen 在介绍该功能时重点描述了这个场景,该功能现在允许函数接受和返回泛型类型,同时仍执行加法和减法等相关的操作。


虽然显然是一个很小的功能,但我们应该注意到,社区对它的实现存在一些不满,这主要是由于引入的限制“不允许接口作为类型参数,其中约束包含具有静态虚拟成员的接口”。


一位 .NET 开发人员如此评论说:“我真的不明白,接口中的静态抽象或静态虚拟对开发有多大的帮助”。


另外,有一位开发者对 C# 中的通用数学新特性表示欢迎:“通用数学和 Int128 是我十年来一直的梦想!”


另一个关键特性更新是必需的类成员。它将“required”修饰符添加到属性或字段,这表示着必须在构造方法中初始化才能使用。值得一提的是,此功能实际上简化了继承。


还有一个对于开发人员的日常来说是比较关键和有用的。.NET 6最大的变化是引入了原始字符串文字。“原始字符串文字功能不需要再使用转义和序列化。你可以编写任意字符串,包括空格格式,以及你希望它如何出现在输出中。” .NET的文档如此描述道。


定义原始字符串文字的方法是以至少三个双引号的字符串开始与结束。为什么是“至少”?Torgersen 这样解释道,在原始字符串文字本身中使用多个双引号。如果字符串中出现三个双引号的序列,开发人员可以使用四个双引号作为分隔符,依此类推。


类似的逻辑适用于字符串插值,其中大括号内的文本在运行时将被输出替换。插值字符串以 $ 字符为前缀,“如果输出字符串包含 { 或 } 字符,你可以使用额外的 $ 字符来指定有多少 { 和 } 字符表示开始或结束插值。”


原始字符串文字中有一个很好的功能,可以控制编辑器中的空格是包含在文字中还是从文字中排除。“真正决定如何分割这个空白的是这个结束引用的位置,” Visual Studio 通过绘制一条垂直线来给开发者提供帮助,用来显示什么是字符串文字的一部分,又有哪些不是。


原始字符串文字不是一项开创性的功能,但它们易于理解并且非常有用,相信会受到 C# 开发者的欢迎。

评论