如何正确编写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
相关产品推荐
相关产品推荐

