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

如何正确编写setter实现C#类私有成员的赋值校验与修改

问题根因

  • setter校验逻辑错误:setter中当前判断的是原有私有字段age的值,而非用户输入的新值value,校验永远基于旧值生效。比如实例化后私有字段age初始为1,后续赋值-1时,判断的是旧值1≥0,会直接将-1赋值给age并输出Viable,校验完全失效。
  • 构造函数未触发setter:构造函数中直接对私有字段this.age赋值,不会触发Age属性的setter逻辑,自然不会执行校验规则。若需构造阶段也执行校验,需改为对公共属性this.Age赋值。

修复后代码

namespace HopeThisWorks
{
    class Person
    {
        private int age;

        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                // 校验输入的新值value
                if(value >= 0)
                {
                    age = value;
                    System.Console.WriteLine("Viable");
                }
                else
                {
                    age = 0;
                    System.Console.WriteLine("Not Viable");
                }
            }
        }
        public Person(int age)
        {
            // 给属性赋值触发setter校验
            this.Age = age;
        }
    }
}

修复后运行你提供的Main方法,输出如下:

Viable
Not Viable

此时实例p1的Age属性最终值为0,完全符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:45:01