C# 面试题 目录

C# 中 init 访问器的用法

推荐答案

在 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# 提供了一种简洁且安全的方式来创建不可变对象,同时保持了代码的可读性和易用性。

纠错
反馈