如何在C#类中为属性赋值计算值?以Car类YearCreated为例
实现方案
根据你的需求,有两种常见的实现方式,你可以根据实际场景选择:
方式一:只读计算属性(推荐)
把YearCreated改成只读的计算属性,每次访问时自动计算2023 - Age的值,这样Age变化时,YearCreated会自动同步更新,不需要手动维护:
public class Car { public string Id { get; set; } public Producent Producent { get; set; } public int Age { get; set; } // 只读计算属性,实时计算年份 public int YearCreated => 2023 - Age; public Engine Engine { get; set; } }
这种方式简洁高效,不需要额外字段或同步逻辑,完全由计算逻辑保证两个属性的一致性,适合YearCreated不需要手动修改的场景。
方式二:在Age的setter中同步更新YearCreated
如果需要YearCreated支持手动修改,但希望设置Age时自动同步更新它,可以给Age添加私有字段,在setter里更新YearCreated:
public class Car { private int _age; public string Id { get; set; } public Producent Producent { get; set; } public int Age { get => _age; set { _age = value; // 设置Age时自动更新YearCreated YearCreated = 2023 - _age; } } public int YearCreated { get; set; } public Engine Engine { get; set; } }
这种场景下,你既可以通过设置Age让YearCreated自动计算,也可以手动给YearCreated赋值覆盖计算结果。
额外说明
如果需要的不是固定的2023,而是当前年份,可以把2023替换为DateTime.Now.Year,这样年份会自动跟随系统时间变化:
public int YearCreated => DateTime.Now.Year - Age;
内容的提问来源于stack exchange,提问作者Ptrk12
相关产品推荐
相关产品推荐

