推荐答案
在 C# 9.0 中引入了 init
访问器,它允许在对象初始化期间设置属性值,但在初始化完成后,属性将变为只读。init
访问器通常用于不可变对象的创建。
-- -------------------- ---- ------- ------ ----- ------ - ------ ------ --------- - ---- ----- - ------ ------ -------- - ---- ----- - - -- ------------ --- ------ - --- ------ - --------- - ------- -------- - ----- -- -- -------------------- -- ---------------- - -------
本题详细解读
init
访问器的背景
在 C# 9.0 之前,创建不可变对象通常需要定义只读字段或属性,并通过构造函数来初始化这些字段或属性。这种方式虽然有效,但在某些情况下会导致代码冗长且不够直观。为了解决这个问题,C# 9.0 引入了 init
访问器。
init
访问器的特点
初始化期间可写:
init
访问器允许在对象初始化期间设置属性值。这意味着你可以在对象初始化器或构造函数中为属性赋值。初始化后只读:一旦对象初始化完成,属性将变为只读,无法再修改其值。这确保了对象的不可变性。
与
readonly
的区别:init
访问器与readonly
字段不同。readonly
字段只能在构造函数中赋值,而init
访问器可以在对象初始化期间赋值。
使用场景
init
访问器非常适合用于创建不可变对象,尤其是在需要确保对象在初始化后不会被修改的场景中。例如,DTO(数据传输对象)、配置对象或领域模型中的值对象。
示例代码
-- -------------------- ---- ------- ------ ----- ------------- - ------ ------ --------- - ---- ----- - ------ --- ---- - ---- ----- - - -- ------------ --- ------ - --- ------------- - --------- - ---------------------- ---- - ---- -- -- -------------------- -- ---------------- - ----------------------
注意事项
init
访问器只能在 C# 9.0 及更高版本中使用。init
访问器不能与set
访问器同时使用。init
访问器可以用于自动实现的属性,也可以用于显式实现的属性。
通过使用 init
访问器,C# 提供了一种简洁且安全的方式来创建不可变对象,同时保持了代码的可读性和易用性。