.NET 10 & C# 14 New Features 新增功能介绍-field关键字

上篇文章给大家分享了
.NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members

今天给大家继续分享field关键字

C# 14 中,引入了新的上下文关键字 field ,用于在自动属性(auto-property)的访问器中直接访问编译器生成的隐藏 backing field(后备字段)。

这解决了一个长期存在的问题:

自动属性如果需要在 set 中做校验或增强逻辑,就必须手动声明一个私有字段。

主要价值:field 允许你在属性的 get / set 访问器内部,直接访问自动生成的隐藏字段,而不需要手写私有变量。

一、代码示例

① 传统写法:

需要手动声明 _age。

复制代码
private int _age;

public int Age
{
    get => _age;
    set
    {
        if (value < 0)
            throw new ArgumentException();
        _age = value;
    }
}

② 使用filed关键字

复制代码
public int Age
{
    get => field;
    set
    {
        if (value < 0)
            throw new ArgumentException();
        field = value;
    }
}

这个语法糖:

  • 不需要声明 _age
  • 语义更清晰
  • 减少样板代码

二、典型应用场景

带校验的自动属性

复制代码
public string Name
{
    get => field;
    set => field = string.IsNullOrWhiteSpace(value)
        ? throw new ArgumentException("Name cannot be empty")
        : value;
}

修改值后做额外处理

复制代码
public int Score
{
    get => field;
    set
    {
        field = value;
        OnScoreChanged();
    }
}

限制最大最小值

复制代码
public int Percentage
{
    get => field;
    set => field = Math.Clamp(value, 0, 100);
}

三、底层技术原理

编译器仍然生成类似:

private int <Age>k__BackingField;

field 本质是对这个隐藏字段的语法糖访问。

IL 不变,只有语法层增强。

field 关键字本质是:

让自动属性可以"半升级"为带逻辑的属性,而不丢失简洁性。

以上分享给大家。

周国庆

20260223