C# 9.0 于 2020 年与 .NET 5 一同发布,带来了一系列新特性,旨在提高代码的简洁性、可读性和表达力。
以下是 C# 9.0 的主要新增特性及示例:
1️⃣ 记录类型(Record Types)
- 作用:记录类型提供了一种简洁的方式来定义不可变的数据载体,并且内置了结构相等性比较、
with
表达式(用于克隆并修改对象)等功能,非常适合用于数据传输对象(DTO)。 - 示例:
// 定义记录类型 public record Person(string FirstName, string LastName); // 自动生成构造函数、属性、Equals、GetHashCode 和 ToString 方法 var person1 = new Person("Alice", "Smith"); var person2 = person1 with { LastName = "Johnson" }; Console.WriteLine(person1); // 输出:Person { FirstName = Alice, LastName = Smith } Console.WriteLine(person2); // 输出:Person { FirstName = Alice, LastName = Johnson }
2️⃣ 初始化器(Init-only Setters)
- 作用:通过
init
访问器,可以在对象初始化期间设置属性的值,但之后属性变为只读,从而更好地支持不可变模式。 - 示例:
public class Person { public string FirstName { get; init; } public string LastName { get; init; } } // 只能在对象初始化时设置属性 var person = new Person { FirstName = "Bob", LastName = "Brown" }; // person.FirstName = "Tom"; // 编译错误
3️⃣ 顶级语句(Top-level Statements)
- 作用:顶级语句允许你在不需要显式编写
Main
方法的情况下编写程序入口点,极大简化了小型应用程序和示例代码的结构。 - 示例:
// 顶级语句:整个文件内的代码直接作为程序入口点执行 Console.WriteLine("Hello, C# 9.0!"); // 无需显式定义 Main 方法
4️⃣ 模式匹配增强(Enhanced Pattern Matching)
C# 9.0 在模式匹配方面进一步扩展,新增了以下模式:
- Relational Patterns:允许使用关系运算符(如
<
,>
,<=
,>=
)进行匹配。 - Logical Patterns:允许使用逻辑运算符
and
,or
和not
来组合或反转模式。 - 示例:
public string ClassifyNumber(int number) => number switch { < 0 => "Negative", 0 => "Zero", > 0 and < 10 => "Small Positive", >= 10 => "Large Positive", _ => "Unknown" }; // 使用 not 模式 bool IsNotNullOrEmpty(string s) => s is not null and not "";
5️⃣ Target-Typed new 表达式
- 作用:在变量的声明中,允许使用
new()
而省略类型名称,由编译器从上下文中推断出类型,使代码更简洁。 - 示例:
List<int> numbers = new() { 1, 2, 3, 4 }; // 等效于:List<int> numbers = new List<int> { 1, 2, 3, 4 };
6️⃣ 协变返回类型(Covariant Returns)
- 作用:允许重写方法时返回更派生的类型,相比以前的协变限制,提升了代码的灵活性。
- 示例:
public class Animal { } public class Cat : Animal { } public class AnimalShelter { public virtual Animal GetAnimal() => new Animal(); } public class CatShelter : AnimalShelter { // 重写方法返回更具体的类型 Cat public override Cat GetAnimal() => new Cat(); }
7️⃣ 函数指针(Function Pointers)
- 作用:支持在不安全代码块中使用函数指针(
delegate*
),为需要极致性能的场景(如与本地代码交互)提供低开销调用机制。 - 示例(需启用不安全代码):
unsafe { delegate* unmanaged[Cdecl]<int, int, int> addPtr = &Add; int result = addPtr(3, 4); Console.WriteLine(result); // 输出 7 } static int Add(int a, int b) => a + b;
总结
C# 9.0 通过一系列新特性为开发者提供了更多工具来编写简洁、表达力强且更安全的代码:
- 记录类型 与 init-only setters 支持不可变数据模型和简化数据传输对象的定义。
- 顶级语句 简化了程序入口点的书写,适合快速开发和小型项目。
- 模式匹配增强 提高了条件分支和数据解构的灵活性。
- Target-typed new 以及 协变返回类型 让代码更加精炼与灵活。
- 函数指针 则为极致性能场景提供了底层支持。
这些特性共同提升了 C# 语言的表达能力和开发效率,非常适合构建现代化应用程序。
如果你在整理 C# 各版本的演进,这部分内容展示了 C# 逐步向更现代、声明式和高效方向演进的趋势。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南