C# 9.0新特性:只初始化设置器init

0 下载量 154 浏览量 更新于2024-08-28 收藏 81KB PDF 举报
"C# 9.0引入了一个新的特性,即只初始化设置器(init访问器),这使得创建不可变类型变得更加简洁和高效。" 在C#编程语言的发展过程中,保持对象状态不变性是一个重要的设计原则,特别是对于值类型如structs。在C# 9.0之前,创建不可变类型通常需要声明readonly字段并配合只包含get访问器的属性,以确保一旦对象被创建,其状态就不能被修改。例如,定义一个表示二维坐标的Point结构体: ```csharp struct Point { public int X { get; } public int Y { get; } public Point(int x, int y) { this.X = x; this.Y = y; } } ``` 然而,这种方式需要为每个属性编写额外的构造代码,随着属性数量增加,维护成本也随之提高。为了解决这个问题,C# 9.0引入了init访问器,它允许属性在对象初始化时被设置,但在之后的生命周期中变得不可修改。这样,Point结构体可以改写为: ```csharp struct Point { public int X { get; init; } public int Y { get; init; } } ``` 使用init访问器后,我们可以通过对象初始化器来创建和初始化Point实例,如下所示: ```csharp var p = new Point { X = 54, Y = 717 }; ``` 这种改变不仅减少了代码量,还提高了代码的可读性。此外,它让开发者可以更方便地创建不可变类型,而不必牺牲初始化的灵活性。例如,考虑一个Person类,如果希望在创建实例时设置First Name和Last Name,但之后不允许修改,可以这样定义: ```csharp public class Person { public string? FirstName { get; init; } public string? LastName { get; init; } } ``` 现在,Person类的实例可以通过对象初始化器创建,但一旦创建完成,FirstName和LastName将不能被修改,增强了类型的安全性和一致性。 C# 9.0的只初始化设置器(init访问器)是一个面向开发者的强大工具,它简化了不可变类型的实现,提高了代码的简洁性和可维护性。这一特性使得在保证对象不变性的同时,还能利用对象初始化的便利性,是C#语言进化的一个重要步骤。