淡若轻风

博客园 首页 新随笔 联系 订阅 管理
  52 随笔 :: 0 文章 :: 0 评论 :: 6334 阅读

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, ornot 来组合或反转模式。
  • 示例:
    复制代码
    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# 逐步向更现代、声明式和高效方向演进的趋势。

 

posted on   淡若轻风  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示