C# 面试题
目录

C# 中 init 访问器的用法

· 约 3 分钟读完 · 第 127 / 183 章

推荐答案

在 C# 9.0 中引入了 init 访问器,它允许在对象初始化期间设置属性值,但在初始化完成后,属性将变为只读。init 访问器通常用于不可变对象的创建。

本题详细解读

init 访问器的背景

在 C# 9.0 之前,创建不可变对象通常需要定义只读字段或属性,并通过构造函数来初始化这些字段或属性。这种方式虽然有效,但在某些情况下会导致代码冗长且不够直观。为了解决这个问题,C# 9.0 引入了 init 访问器。

init 访问器的特点

  1. 初始化期间可写:init 访问器允许在对象初始化期间设置属性值。这意味着你可以在对象初始化器或构造函数中为属性赋值。

  2. 初始化后只读:一旦对象初始化完成,属性将变为只读,无法再修改其值。这确保了对象的不可变性。

  3. 与 readonly 的区别:init 访问器与 readonly 字段不同。readonly 字段只能在构造函数中赋值,而 init 访问器可以在对象初始化期间赋值。

使用场景

init 访问器非常适合用于创建不可变对象,尤其是在需要确保对象在初始化后不会被修改的场景中。例如,DTO(数据传输对象)、配置对象或领域模型中的值对象。

示例代码

注意事项

  • init 访问器只能在 C# 9.0 及更高版本中使用。
  • init 访问器不能与 set 访问器同时使用。
  • init 访问器可以用于自动实现的属性,也可以用于显式实现的属性。

通过使用 init 访问器,C# 提供了一种简洁且安全的方式来创建不可变对象,同时保持了代码的可读性和易用性。