AgeCalc属性输出0问题咨询:原代码失效原因解析
原代码失效原因解析
原代码里AgeCalc返回0的核心问题是:你从来没触发过AgeCalc的set方法,导致存储年龄的personAge字段一直是int类型的默认值0。
原代码的逻辑问题
在你的HeartRateData类中,AgeCalc的set块负责计算personAge = CurrentYear - BirthYear,但这个代码块只有在你主动给AgeCalc赋值时才会运行(比如写person1.AgeCalc = 1;这种语句)。而你的主方法里,只设置了BirthYear和CurrentYear,然后直接读取AgeCalc——这只会触发get方法,返回的是从未被更新过的personAge初始值0。
修改后代码正常的原因
你把计算逻辑移到了get方法里,每次读取AgeCalc时,都会用当前的CurrentYear和BirthYear实时计算年龄,不需要依赖外部触发赋值操作,所以能得到正确结果。
原代码的可选修复方式(保留set的场景)
如果一定要保留原结构,需要在设置完年份后主动触发set,比如:
person1.CurrentYear = cYear; // 随便赋个值触发set块,执行年龄计算 person1.AgeCalc = 0; Console.WriteLine($"Your Age is {person1.AgeCalc}");
但这种写法不符合C#属性的设计规范,更推荐的是直接用只读属性简化实现:
public int AgeCalc => CurrentYear - BirthYear;
内容的提问来源于stack exchange,提问作者Rembert Micheal
相关产品推荐
相关产品推荐

