【发布时间】:2020-11-09 18:29:54
【问题描述】:
我正在尝试在对象上实现属性,这些属性的值派生自其他对象的属性值。例如,名为 Student 的类中名为 TotalPoints 的属性在 get{} 中有以下代码,
foreach(var subject in Subjects)
{
_totalPoints += subject.Points;
}
return _totalPoints;
这适用于简单的情况。但是,当涉及更多级别时,例如,Subject.Points 实际上是指其他东西。计算会慢一些。我想弄清楚的是:
-
如果有什么方法可以检测Points的值是否有任何变化,如果没有,我不想重新计算_totalPoints;
-
有没有其他方法可以实现这一点?我也在想是否可以“通知” TotalPoints 其中一个 Subject.Points 的值已经改变,所以 TotalPoints 需要重新计算。
感谢任何人有任何想法。谢谢。
【问题讨论】:
-
执行此操作的经典方法是让您的类型实现
INotifyPropertyChanged接口,并且持有它们的类型应订阅其每个属性的PropertyChanged事件,计算 @更改Points属性时的 987654324@ 值 - 但是,这会增加代码的复杂性,除非计算速度真的很慢(也就是说,人类很明显)我会三思而后行,然后再更喜欢你现在拥有的更简单的代码.