You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

属性getter前readonly关键字含义及无作用却添加原因咨询

关于C#中readonly get属性的疑问

问题背景

查看Point类型定义时看到如下代码:

public int X
{
    readonly get => x;
    set => x = value;
}

对此有两个疑问:

  1. 明确该属性并非只读(因为包含setter),那readonly get是什么含义?上述getter和setter具体表示什么?
  2. 看到资料提到:

readonly可以应用于某些自动实现的属性,但不会产生有意义的效果。无论是否存在readonly关键字,编译器都会将所有自动实现的getter视为只读。
既然该关键字无实际作用,为何还要添加它?

解答

1. readonly get的含义与getter/setter的作用

  • readonly修饰getter时,是将getter方法标记为只读成员,意味着在这个getter内部,不能修改当前类的任何实例字段(readonly字段在构造函数内的修改除外)。
  • 这段代码里的属性不是只读属性——因为存在setter,外部依然可以通过X = ...修改属性值。readonly只作用于getter本身,不影响整个属性的可写性。
  • 具体逻辑:
    • readonly get => x;:这个getter仅负责返回私有字段x的值,内部无法修改类的实例状态,符合readonly的约束。
    • set => x = value;:setter接收外部传入的value,赋值给私有字段x,实现属性值的修改。

2. 为何添加无实际作用的readonly关键字?

  • 明确代码意图:开发人员通过添加readonly,可以直观地向其他阅读代码的人传达“这个getter不会修改任何实例状态”的意图,提升代码可读性。
  • 团队编码规范:部分团队的编码规则会要求所有无状态修改的getter都加上readonly,哪怕编译器默认处理,以此保持代码风格的统一。
  • 潜在的版本兼容:虽然当前编译器对自动实现属性的getter默认视为只读,但未来C#版本可能对readonly get扩展新语义,提前添加可降低后续代码调整成本。

内容的提问来源于stack exchange,提问作者Ashkan Mobayen Khiabani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:14:55