C# 12 都有哪些新特性?
.NET 首席项目经理凯瑟琳在博客中介绍了 C# 12 的一些预览版新功能,这些功能可以在 Visual Studio 17.6 预览版和最新的.NET 8 预览版中体验。
C# 12 主要有如下新特性:
非记录类和结构的主构造函数
主构造函数允许将参数添加到类声明本身,并在类主体中使用这些值。
作为记录位置语法的一部分,主构造函数在 C# 9 中引入,而 C# 12 则将主构造函数扩展到所有类和结构。
主构造函数的基本语法和用法:
public class Student(int id, string name, IEnumerable<decimal> grades) { public Student(int id, string name) : this(id, name, Enumerable.Empty<decimal>()) { } public int Id => id; public string Name { get; set; } = name.Trim(); public decimal GPA => grades.Any() ? grades.Average() : 4.0m; }
上面 Student 类中的主构造函数参数在类的整个主体中都可用。
所有类型均可使用 using 指令起别名
C# 12 将 using 指令支持扩展到任何类型,如:
using Measurement = (string, int); using PathOfPoints = int[]; using DatabaseInt = int?;
可为几乎任何类型起别,如可空值类型,但不能为可空引用类型起别名。
元组比较特别,它可以包含元素名称和类型:
using Measurement = (string Units, int Distance);
可以在任何需要使用类型的地方使用别名。例如:
public void F(Measurement x) { }
lambda 表达式的默认值
C# 12 通过允许为参数指定默认值,进一步增强了 lambda 表达式的能力。
语法与其他默认参数相同:
var addWithDefault = (int addTo = 2) => addTo + 1; addWithDefault(); // 3 addWithDefault(5); // 6
与其他默认值类似,lambda 的默认值将在元数据中发出,并可通过反射作为 lambda Method
属性的 ParameterInfo
的 DefaultValue
获得。例如:
var addWithDefault = (int addTo = 2) => addTo + 1; addWithDefault.Method.GetParameters()[0].DefaultValue; // 2
在 C# 12 之前,需要使用本地函数或 System.Runtime.InteropServices
命名空间中的 DefaultParameterValue
来为 lambda 表达式参数提供默认值。这些方法仍然有效,但难阅读,且与方法的默认值不一致。
关于上述 C# 12 新功能的详细信息,可以在文档中细阅。
可以在 Roslyn Feature Status 关注 C# 12 的开发进度,还可以在 CSharpLang GitHub 仓库中探索 C# 12 的设计过程,比如相关的建议、讨论和会议记录。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
被泄露的大语言模型 LLaMA,助长了一系列 ChatGPT 开源替代品
开源和基于 API 的分发之间的摩擦是生成式 AI 生态中极为迫切的矛盾。比如在从文本到图像领域,Stable Diffusion 的发布清楚地表明开源是基础模型的可行分发机制。然而,在大型语言模型 (LLM) 领域却并非如此,该领域最大的突破来自 GPT-4、Claude 和 Cohere 等模型,这些模型只能通过 API 获取。并且这些模型的开源替代品没有表现出相同水平的性能,特别是在它们遵循人类指令的能力方面。 然而,一项意想不到的研究突破和泄露的模型版本彻底改变了这一现状。 几周前,Meta 宣布了它的大语言模型 LLaMA,其参数规模从 70 亿到 650 亿参数不等(包括 7B、13B、33B 和 65B 参数),该模型的一大优势是能运行在单张显卡上。当时 Meta 没有开源 LLaMA,而是通过邀请制的方式出于研究的目的将源代码提供给社区。但在宣布该消息一周后,LLaMA 模型在 4chan 上被泄露,有匿名用户通过 BT 种子公开了 LLaMA-65B——有 650 亿个参数的 LLaMA,容量为 220GB。它已被确认是真实的,有用户在单张显卡上运行了 LLaMA,结...
- 下一篇
Ubuntu 23.04 新特性一览
Ubuntu 23.04“Lunar Lobster”计划于 2023 年 4 月 20 日星期四发布,这是 Ubuntu 桌面的第 38 个版本。作为一个短期版本,Ubuntu 23.04 共获得了 9 个月的持续更新、安全补丁和关键修复。 在正式发布之前,OMG! Ubuntu! 汇总整理了一些 Ubuntu 23.04 中的新功能、更改和增强功能,具体包括: 新的安装程序 Ubuntu 23.04 包含一个新的 OS installer。就功能而言,新的 Ubuntu 安装程序与旧版本没有太大区别,但底层技术肯定有所区别。新安装程序是使用 Flutter 构建的,并利用了 Subiquity、Canonical 的 Ubuntu Server CLI 安装程序和 Curtin 等技术。 每个安装页面都经过了改进,以尽可能地实现清晰和简洁,并且在实际安装过程中还有一个改进的幻灯片(现在带有幻灯片控件)。总的来说,新的基于 Flutter 的安装程序给人印象还算良好。但 OMG! Ubuntu! 方面测试发现,确实存在一些 UI 交互很迟钝,安装程序的某些部分会瞬间 freeze 的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境