C# 新语法
大约 2 分钟
C# 新语法
C# 11
C# 10
全局 using 指令
- 将 global 修饰符添加到 using 前,这个命名空间就应用到整个项目,不用重复using。
- 通常创建一个专门用来编写全局using代码的C#文件。
- 如果 csproj 中启用了
<ImplicitUsings>enable</ImplicitUsings>
(默认启动),编译器会自动隐式引入 System、System.Linq 等常用命名空间。
文件范围的命名空间声明
namespace 的花括号可以直接取消,变成声明语句的形式
namespace MyNamespace;
C# 9.0
recode 记录类型
用来提供用于封装数据的内置功能。
记录类型提供以下功能:
用于创建具有不可变属性的引用类型的简明语法
行为对于以数据为中心的引用类型非常有用:
值相等性:使用 == 获取 Equals 方法时直接比较属性值,而不是引用地址
非破坏性变化的简明语法:可以使用 with 表达式来改变记录实例的不可变属性,创建数据副本
Person person1 = new("Nancy", "Davolio") { PhoneNumber = "010-12345678" }; Person person1 = person1 with { FirstName = "John" }; // Person { FirstName = John, LastName = Davolio, PhoneNumber = 010-12345678 }
用于显示的内置格式设置:自动重新 ToString 方法用于显示属性值
支持继承层次结构:一条记录可以从另一条记录继承。 但是,记录不能从类继承,类也不能从记录继承。
属性定义的位置语法:
- 为记录声明中提供的每个位置参数提供一个公共的 init-only 自动实现的属性。
- 自动生成 Deconstruct 方法,对记录声明中提供的每个位置参数都有一个 out 参数。
public record Person(string FirstName, string LastName);
可以声明可变属性
public record Person(string FirstName, string LastName){ public string PhoneNumber{set;get} // 可变 }
顶级语句
- 中直接编写入口方法的代码,不用类,不用Main。
- 同一个项目中只能有一个文件具有顶级语句。
- 顶级语句中可以直接使用await语法,也可以声明函数
C# 8.0
Using 声明
在实现了Idisposable/IAsyncDisposable接口的类型的变量声明前加上using,当代码执行离开变量的作用域时,对象就会被释放。
可以直接使用 using 声明变量,退出作用域时自动释放资源,不必添加花括号
using var ctx = new TestDbContext();