随着 X# 3 的发布日益临近,我们很高兴与大家分享关于 X# 语言及开发平台未来发展方向的一些展望。
尽管 X# 2.24 将是 2.x 系列的最终版本(后续将通过关键 bug 修复提供支持),但我们的重点已转向现代化改造和 .NET 8+ 兼容性。X# 3 旨在填补传统 X# 开发与不断演进的 .NET 生态系统之间的鸿沟。
让我们详细探讨 X# 3 将带来的现代 .NET 功能。
SDK 风格的项目和 NuGet 运行时
X# 3 将全面支持:
这使得将 X# 集成到现代 CI/CD 管道和跨平台开发环境中变得更加容易。
X# 3 计划支持的语言特性
X# 编译器正在更新以支持一系列现代 C# 语言特性,为开发人员提供更简洁的语法、更安全的代码以及更好的可维护性。
文件作用域命名空间
减少缩进并简化文件结构。
旧语法
NAMESPACE MyApp.Core
CLASS LOGGER
...
END CLASS
END NAMESPACE
新语法
NAMESPACE MyApp.Core
CLASS LOGGER
...
END CLASS
全局 Using
在整个项目中一次性定义常见的using指令。这可以在单独的源文件中完成,但新的SDK风格项目格式还允许在项目级别属性中声明整个项目的全局using。
// GlobalUsings.prg
global using System
global using MyApp.Common
您还可以在项目文件中定义全局using。构建系统将生成并包含一个包含这些using的源文件。
<ItemGroup>
<Using Include="System" />
<Using Include="System.Collections.Generic" />
<Using Include="System.Linq" />
</ItemGroup>
可为 NULL 的引用类型(暂定)
启用编译时启用可为 NULL 检查以防止运行时 NULL 引用异常。我们已经支持可为 NULL 类型的 ? 运算符。
我们还将添加 NULL 值容忍运算符(后缀运算符 !)
#nullable enable
FUNCTION Test ()
LOCAL p as Person?
p := CreatePerson() // 可能返回空值
IF IsValid(p) // 仅当 p 不为空且 p:Name 不为空时返回 TRUE
? p!:Name // 感叹号表示我们希望抑制 p 可能为空的警告,因为我们确信这种情况绝不会发生。
ENDIF
RETURN
FUNCTION IsValid(p as Person?)
RETURN p IS NOT NULL .AND. p:Name is NOT NULL
模式匹配增强
更强大的 switch 表达式和类型检测:
ReadOnly 结构体和 Init 访问器
更好地支持数据类型的不可变性。
正在考虑的功能
一些其他 .Net 功能正在评估中,以纳入 X# 3 的未来更新:
这些功能可能会随着编译器和语言基础设施的演进而逐步引入。
可用性和许可
X# 3 将作为编译后的可安装版本仅向订阅者提供。
源代码将保持开源并公开访问。
X# 运行时也将通过 NuGet 包分发。
迎接下一代
X# 3 不仅仅是升级——它是迈向现代 .NET 生态系统的重大飞跃。无论您是在维护遗留代码还是开发新的 .NET 8 应用程序,即将推出的功能都将使您的开发更加快速、安全,并符合行业标准。
敬请期待今年晚些时候的 beta 版本发布!
尚未成为订阅用户?点击此处(https://xsharp.eu/store/shop/Friends-Of-XSharp-Program-One-Year-p301068223)订阅,并使用促销代码 "Summer2025 "可享受七五折优惠。