当前位置:首页 > C# > 正文

C# 12.0新特性详解(主构造函数与集合表达式实战指南)

随着 .NET 8 的发布,C# 12.0 引入了多项令人兴奋的新特性,其中 主构造函数(Primary Constructors)集合表达式(Collection Expressions) 是两个非常实用且能显著提升开发效率的语法糖。本文将用通俗易懂的方式,带您从零开始掌握这两个 C# 12.0 新特性,即使是编程小白也能轻松上手!

C# 12.0新特性详解(主构造函数与集合表达式实战指南) 12.0  主构造函数 集合表达式 新特性 第1张

一、什么是主构造函数?

在 C# 12.0 之前,我们通常需要在类中显式定义字段和构造函数:

public class Person{    private readonly string _name;    private readonly int _age;    public Person(string name, int age)    {        _name = name;        _age = age;    }    public void Introduce() => Console.WriteLine($"Hi, I'm {_name}, {_age} years old.");}

而 C# 12.0 引入了 主构造函数,允许我们在类声明时直接在括号中定义参数,这些参数会自动成为类的私有字段(仅限于类体中使用)。

主构造函数基本用法

public class Person(string name, int age){    public void Introduce() => Console.WriteLine($"Hi, I'm {name}, {age} years old.");}

是不是简洁多了?nameage 在类内部可以直接使用,无需手动声明字段或赋值。

注意:主构造函数目前主要适用于 classstruct,但不能与传统构造函数混用(除非你显式调用主构造函数)。

二、集合表达式:更优雅地初始化集合

C# 12.0 的另一个亮点是 集合表达式(Collection Expressions)。它提供了一种统一、简洁的方式来初始化数组、列表、Span 等多种集合类型。

传统方式 vs 集合表达式

以前,我们要这样写:

int[] numbers = new int[] { 1, 2, 3 };List<string> names = new List<string> { "Alice", "Bob" };ReadOnlySpan<char> chars = "Hello".AsSpan();

现在,使用集合表达式,只需一个简单的语法 [...] 即可:

// 自动推断为 int[]var numbers = [1, 2, 3];// 转换为 List<string>List<string> names = ["Alice", "Bob"];// 转换为 ReadOnlySpan<char>ReadOnlySpan<char> chars = ['H', 'e', 'l', 'l', 'o'];// 甚至支持展开操作符(spread operator)var moreNumbers = [..numbers, 4, 5]; // 相当于 [1, 2, 3, 4, 5]

集合表达式不仅减少了样板代码,还提高了可读性,并且支持 展开操作符 ..,可以轻松合并多个集合。

三、结合使用:主构造函数 + 集合表达式

让我们看一个实际例子,展示如何将这两个 C# 12.0 新特性结合起来使用:

public class Student(string name, params string[] courses){    // 使用集合表达式创建新课程列表    private readonly string[] _courses = [..courses, "General Education"];    public void PrintSchedule()    {        Console.WriteLine($"{name}'s courses:");        foreach (var course in _courses)        {            Console.WriteLine($" - {course}");        }    }}// 使用var student = new Student("Tom", "Math", "Physics");student.PrintSchedule();// 输出:// Tom's courses://  - Math//  - Physics//  - General Education

在这个例子中,我们利用主构造函数接收学生姓名和课程列表,并通过集合表达式的展开操作符 .. 添加一门默认课程,代码既简洁又功能强大。

四、注意事项与适用场景

  • 主构造函数适合用于简单、不可变的数据类(类似 record),不建议在复杂业务逻辑类中过度使用。
  • 集合表达式适用于所有实现了 ICollection<T> 或支持集合初始化的类型,包括数组、List、Span 等。
  • 这两个特性都需要 .NET 8 及 C# 12.0 编译器支持,请确保你的项目目标框架为 net8.0

结语

C# 12.0 的 主构造函数集合表达式 极大地简化了日常编码工作,让 C# 代码更加现代、简洁和富有表现力。掌握这些 C# 新特性,不仅能提升开发效率,还能让你的代码更具可读性和维护性。

赶快在你的 .NET 8 项目中尝试这些特性吧!如果你觉得本文对你有帮助,欢迎分享给更多正在学习 C# 12.0 的朋友。