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

C#自动实现属性仅用set访问器报错的原因与解决方法

C#只写自动实现属性报错的原因与解决办法

报错原因

C#编译器对自动实现属性的设计有明确限制:自动实现属性必须至少包含一个get访问器。

当你编写public int A { set; }时,编译器无法为其生成合理的私有后备字段——因为这个字段的值永远无法被读取(没有get访问器),这种设计在逻辑上没有实际价值,所以编译器拒绝自动生成,要求你必须手动为set访问器编写主体(就像类E那样),或者将属性标记为abstract/extern(但这显然不是你需要的场景)。

认知误区

你误以为自动实现属性支持所有访问器组合,但实际上只写的自动实现属性不符合C#的设计规范——编译器认为这种属性没有存在的意义,因为设置的值无法被任何代码获取,所以不提供自动生成支持。

解决办法

  • 手动声明后备字段(若坚持只写属性):如果确实需要对外暴露只写属性,只能像类E一样手动实现,这是唯一可行的方式:
    class C
    {
        private int _a;
        public int A { set => _a = value; }
    }
    
  • 调整属性设计(更推荐方案):通常只写属性是反模式,设置后无法读取的值几乎没有实用场景。如果允许类内部读取该值,可以改用内部可读、外部只写的自动实现属性,既保留简洁性又满足需求:
    class C
    {
        public int A { private get; set; }
    }
    

内容的提问来源于stack exchange,提问作者William James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:24