佴莘莘 发表于 2026-2-23 10:55:00

.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 k__BackingField;
field 本质是对这个隐藏字段的语法糖访问。
IL 不变,只有语法层增强。
field 关键字本质是:
让自动属性可以“半升级”为带逻辑的属性,而不丢失简洁性。 
以上分享给大家。
 
周国庆
20260223
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

固拆棚 发表于 2026-2-24 20:34:07

分享、互助 让互联网精神温暖你我

巫雪艷 发表于 2026-2-25 02:40:46

yyds。多谢分享

剽达崖 发表于 2026-2-25 06:36:56

过来提前占个楼

衣旱 发表于 2026-3-7 04:16:52

感谢分享

周濡霈 发表于 2026-3-8 08:07:47

很好很强大我过来先占个楼 待编辑

疝镜泛 发表于 2026-3-8 10:31:24

感谢分享,学习下。

后雪闵 发表于 2026-3-9 15:15:58

很好很强大我过来先占个楼 待编辑

撒阗奕 发表于 2026-3-11 09:19:03

前排留名,哈哈哈

处匈跑 发表于 2026-3-11 21:53:15

这个有用。
页: [1]
查看完整版本: .NET 10 & C# 14 New Features 新增功能介绍-field关键字