C# 9.0 新特性预览 - 顶级语句
Published on2020-09-23
-Views
1Minutes Read
C# 9.0 新特性预览 - 顶级语句
前言
随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大家展示它们。
目录
[C# 9.0 新特性预览 - 顶级语句]
[C# 9.0 新特性预览 - Record 类型]
[C# 9.0 新特性预览 - 模式匹配的改善]
[C# 9.0 新特性预览 - 源代码生成器]
[C# 9.0 新特性预览 - 其他小的变化]
顶级语句 (Top-level statements)
顶级语句这个名字看起来不是那么直观,或许它的曾用名更好一些:Simple Programs,简单程序。
目的
想必大家都知道,即使是最简单的 C# 程序,也会有一定量的繁文缛节,因为最少也需要一个 Main 方法。这似乎妨碍了语言的学习和程序的清晰度。因此,这个特性的最主要目的就是为了初学者和代码的清晰度,让书写 C# 程序可以变得更轻松。
语法
语法 Spec 如下,允许在命名空间的声明前面,添加一组语句,且只允许有一个编译单元(可以认为是一个源文件)拥有这种语句:
Spec 比较难懂,我们直接来看示例:简单来说,就是允许在源文件中直接书写代码语句而不用写 Main 方法:
以上代码会被翻译为:
可以看到,WriteLine语句被自动的包在了一个类和 Main 方法里面。
自动生成的 Main 方法的返回值也会根据是否异步以及是否有返回值来变化,例如:
会被翻译为:
各种场景
- 支持在 using 语句后面:
会被翻译为:
- 也可以加上本地函数:
- 可以与其它代码共存,例如类的声明:
稍微复杂一点的:
- 同时兼容了using alias的语法
- 也可以同时与显示的 Main 方法声明在一起,只不过显示的Main方法会被忽略掉并提示一个警告
限制
- 不支持在多个编译单元下拥有顶级语句:
- 不能放在类的内部
- 不能放在命名空间的内部
- 要么所有分支都有返回值,要么都没有
- 虽然可以可以与类声明一起写,但是在类中是无法调用到 Main 方法 args 入参的,因为编译时会编译为两个类
- 自然,你也不能用 args 来命名本地函数
参考
Tags:
#Blog