.NET 10 中 C# 14 和 F# 10 的新情况

news/2025/11/23 17:39:55/文章来源:https://www.cnblogs.com/shanyou/p/19261116

C# 14 和 F# 10 将随 .NET 10 正式发布,这两个微软主力.NET语言的更新聚焦于生产力、代码清晰度和性能提升。本次发布通过协调一致的改进,优化了常见编码模式,同时实现了整个.NET工具链的增强。

C#14 亮点
C# 14版本增加了多种语言功能,旨在减少样板程序,提高常见场景的效率。正如 Microsoft 所解释的,“C# 14 随 .NET 10 一起发布。亮点是新增的扩展成员,但还有更多功能让你作为开发者的工作更加高效。”

扩展成员——使扩展属性、扩展算符和静态扩展成员成为最显著的变化。根据11月17日DevBlogs的一篇文章 《C# 14介绍》,“扩展成员是C# 14的核心功能。新语法与现有扩展方法完全兼容。”此次更新整合了扩展属性、扩展作符和静态扩展成员,形成了一个统一模型,减少了开发者在之前版本中使用的变通方法。这些成员通过扩展块定义,允许扩展属性和用户自定义作符等特征与熟悉的模式并列出现。

该版本还通过新的上下文关键词field 改进了自动属性自定义,用于编译器生成的后备存储。Microsoft 解释了其意图:“上下文关键词在进化路径上形成了一个中间步骤:保持自动属性的简洁,只在必要时注入最小限度的逻辑,并让编译器合成并命名后备存储。”这使得开发者只需修改需要逻辑的访问器,同时保留自动属性的简单性。

其他更新包括支持未绑定的泛型类型,如,简化的λ参数修饰符(例如,),以及通过构造在赋值左侧使用空条件运算符的能力。C# 14 还扩展了部分类型以支持部分事件和部分构造子,提升了与源生成器的兼容性。

与性能相关的添加包括隐式的张幅转换,允许数组片(如)自动转换为或不显式调用。该版本还支持用户自定义的复合赋值运算符,如自定义类型,提供了更清晰的语法和在数值和向量场景中的优化机会。更多信息可见达斯汀·坎贝尔的视频。

F# 10 亮点
F# 10版本注重精炼和一致性。Microsoft在文章《F# 10介绍》将此次更新描述为“一次聚焦于清晰度、一致性和性能的精炼版本,带来了细微但有意义的改进,使日常代码更加易读和稳健。”

其中最显著的变化之一是范围警告抑制。开发者现在可以配对指令控制特定代码区间内的警告,提升了比以往版本更高的精度。这使得可以对单个部分开启或关闭警告,而不会影响整个文件。

还支持自动属性访问器访问修饰符,通过语法实现诸如公开可读但私有可写的成员等模式。可选参数现在可以通过应用属性来使用基于结构的表示,从而减少性能敏感代码中的分配。

type Ledger() =
     [<DefaultValue>] val mutable private _Balance: decimal
     member this.Balance with public get() = this._Balance and private set v = this._Balance <- v

F# 10还包括对计算表达式的增强。在 中的类型绑定和表达式不再需要括号,且现在允许在绑定中使用丢弃模式()。当构建者实现可选方法(如或)时,尾调用支持即可实现优化控制流。


该版本强制属性目标验证,揭示了之前接受但被忽视的属性问题。正如Microsoft所指出的,“这是一个突破性变更,可能会暴露你代码库中此前沉默的问题。”FSharp.Core 库增加了对表达式关键词的支持,使得习语并发等待成为可能,而无需 。

工具和基础设施改进包括新的类型下含缓存以加快类型检查速度和IntelliSense响应性,改进无需手动替换文件的裁剪行为,预览并行编译功能,以及在使用.的脚本中扩展支持类型检查模式


结论
.NET 10 发布浪潮带来了 C# 和 F# 的协调更新,C# 14 强调简化常见开发模式的新功能,F# 10 则侧重于一致性和编译器性能。这些版本共同延续了 .NET 在语言阵容中逐步、面向开发者改进的更广泛趋势。

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

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

相关文章

P10687 True Liars 个人题解

题目传送门 题目大意: 给你两个神圣种族和邪恶种族的人数以及询问次数,其中神圣种族的人说真话,邪恶种族的人说假话,请你判断那几个是神圣种族的人。 Solution: 题解区已经有很多带边权并查集的做法了,这里我用的…

Kali资料

Kali资料解决Kali Linux APT更新中的GPG签名错误问题

题解:Luogu P14522 【MX-S11-T3】空之碎物

题意 定义 \(\ominus\) 为二进制不退位减法。对于一个可重集 \(S\),你可以进行若干次操作,每次操作可以选择 \(S\) 中的两个数 \(x,y\),合并成 \(x\ominus y\) 或 \(y\ominus x\)。定义 \(f(S)\) 为将 \(S\) 合并至…

10分钟,无需公网 IP!零门槛搭建 NapCatQQ 趣味 AI 人机,聊天互动超简单

10分钟,无需公网 IP!零门槛搭建 NapCatQQ 趣味 AI 人机,聊天互动超简单无需公网 IP 即可打造 QQ 智能人机:核心依赖 NapCat(接收 QQ 消息)与 AstrBot(提供 AI 能力)容器,通过 WebSocket 建立连接,配置硅基流…

1088. Rational Arithmetic (20)

1088. Rational Arithmetic (20)#include <iostream>using namespace std;long long getsame(long long a, long long b) {if(b != 0){return getsame(b, a % b);}else{return a;} }void simplify(long long &am…

1087. All Roads Lead to Rome (30)

1087. All Roads Lead to Rome (30)#include <iostream> #include <vector> #include <string.h>using namespace std;struct node {int next, cost; };vector<node> v[27000]; vector<int…

解码UDP

UDP 协议基础认知 UDP(User Datagram Protocol,用户数据报协议)是传输层核心协议之一,基于 IP 协议实现跨网络主机进程间的无连接数据传输。它面向事务提供简单通信服务,不保证数据交付、有序性和重复防护,也不提…

人工智能之数据分析 numpy:第六章 数组基本操作

人工智能之数据分析 numpy:第六章 数组基本操作人工智能之数据分析 numpy 第六章 数组基本操作@目录人工智能之数据分析 numpy前言一、修改数组形状(Reshaping)1. reshape()2. resize()3. ravel() 与 flatten()二、…

2025中山办公场地租赁优选:中山西区金嘉创新港,一站式创业空间,赋能企业成长新机遇

随着中山市产业升级与创新创业浪潮的蓬勃发展,优质办公空间已成为企业发展的重要基石。在2025年中山商业地产市场中,中山西区金嘉创新港凭借多元化的空间解决方案、完善的配套服务体系及卓越的区位优势,成为各类企业…

国产数据库替代MongoDB:政务电子证照新选择 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

读书笔记《投资的未来》,估算收益率

比较IBM和新泽西标准石油两家公司,一个新兴的,受追捧的,一个传统的,但结果,是石油公司胜出。尽管两只股票的业绩都不错,但是1950~2003年,新泽西标准石油的投资者每年可以取得14.42%的年收益率,这比IBM提供的1…

使用代码查询快递信息的方法(与查询天气的方式雷同)

第一步:在标签中添加JS文件具体内容如下:第二步:写出大概的框架第三步:写JS部分(1)定义appkey和API地址(2)校验输入和显示加载状态(3)调用API和解析返回数据(4)展示拼接内容和判断内容是否正确第四步:保存并运行查…

1101. Quick Sort (25)

1101. Quick Sort (25)#include <iostream> #include <vector> #include <algorithm>using namespace std;int num[100010], low[100010], high[100010];int main() {int n;scanf("%d", &…

1100. Mars Numbers (20)

1100. Mars Numbers (20)#include <iostream> #include <string.h>using namespace std;char ch[2][13][5] = {"tret", "jan", "feb", "mar", "apr",…

解码网络编程基础

进程间通信方式 基础概念 程序是数据和指令的集合,运行时成为进程,操作系统会为其分配资源并记录参数。同一主机内进程通信可通过管道、信号、消息队列、信号量集、共享内存实现,这些方式依赖主机本地系统资源,无法…

C++的3种继承方式

C++的3种继承方式 在 C++ 中,继承方式(public、protected、private)决定了基类成员在派生类中的访问权限,以及派生类对象对基类成员的访问权限。正确选择继承方式是实现封装、复用和多态的关键。以下是三种继承方式…

1082. Read Number in Chinese (25)

1082. Read Number in Chinese (25)#include <iostream> #include <string.h>using namespace std;int first = 1;void setfirst() {if(first == 1){first = 0;}else{printf(" ");} }int main()…

1081. Rational Sum (20)

1081. Rational Sum (20)#include <iostream>using namespace std;long long getsame(long long a, long long b) {if(b != 0){return getsame(b, a % b);}else{return a;} }void simplify(long long &a, lo…

1067. Sort with Swap(0) (25)

1067. Sort with Swap(0) (25)#include <iostream>using namespace std;int index[100010], num[100010];int main() {int n;scanf("%d", &n);int i, count = 0;for(i = 0; i < n; i++){scanf(…

1066. Root of AVL Tree (25)

1066. Root of AVL Tree (25)#include <iostream> #include <stdlib.h>using namespace std;typedef struct node {int key, bf;struct node *lchild, *rchild; }*bnode;void rrotate(bnode *root) {bnode…