2.1.1 顶级语句
在以前版本的C#语法中,即使只编写一行输出“Hello world”的C#代码,也需要创建一个C#类,并且需要为这个C#类添加Main方法,才能在Main方法中编写代码。从C# 9.0开始,C#增加了“顶级语句”语法,它使得可以直接在C#文件中编写入口代码,不再需要声明类和方法
2.1.2 全局using指令
在编写项目代码的时候,我们经常需要引用非常多的.NET官方及第三方的类库,而这些类库通常位于不同的命名空间下,这样就需要在每个C#文件头部编写重复的using语句来引入这些命名空间,非常烦琐。
C# 10.0中增加了“全局using指令”语法,我们可以将global修饰符添加到任何using关键字前,这样通过using语句引入的命名空间就可以应用到这个项目的所有源代码中,因此同一个项目中的C#代码就不需要再去重复引入这个命名空间了。在实践中,通常创建一个专门用来编写全局using代码的C#文件,然后把所有在项目中经常用到的命名空间声明到这个C#文件中。
2.1.3 using声明
C#中可以用using关键字来简化非托管资源的释放,当变量离开using作用的范围后,会自动调用对象的Dispose方法,从而完成非托管资源的释放。但是,如果一段代码中有很多非托管资源需要被释放,代码中就会存在多个嵌套的using语句。
代码中存在多层using作用域的嵌套,因此代码结构比较复杂。在C# 8.0及之后的版本中,可以使用简化的“using声明”语法来避免代码的嵌套,如代码2-6所示。在声明变量的时候,如果类型实现了IDisposable或IAsyncDisposable接口,那么可以在变量声明前加上using关键字,这样当代码执行离开被using修饰的变量作用域的时候,变量指向的对象的Dispose方法就会被调用。
代码2-5中存在多层using作用域的嵌套,因此代码结构比较复杂。在C# 8.0及之后的版本中,可以使用简化的“using声明”语法来避免代码的嵌套,如代码2-6所示。在声明变量的时候,如果类型实现了IDisposable或IAsyncDisposable接口,那么可以在变量声明前加上using关键字,这样当代码执行离开被using修饰的变量作用域的时候,变量指向的对象的Dispose方法就会被调用。
2.1.4 文件范围的命名空间声明
2.1.5 可为空的引用类型
2.1.6 记录类型
C#还有很多优秀的新增语法,比如元组、解构、本地方法、模式匹配、默认接口方法、索引和范围、null合并赋值、分部方法、源代码生成器等,读者可以参考微软的官方文档了解这些语法。