如何最好地处理相互依赖的属性
本文关键字:依赖 属性 何最好 处理 | 更新日期: 2023-09-27 18:12:49
也许属性不是解决这个问题的方法,但我正在努力寻找一个好的解决方案。
public class Blah
{
public double A { get{ return _B / _C; } }
public double B
{
get{ return _A * _C; }
set{ _B = value; }
}
public double C
{
get{ return _B / _A; }
set{ _C = value; }
}
private double _A;
private double _B;
private double _C;
public Blah(){}
public Blah(double a, double b, double c)
{
this._A = a;
this._B = b;
this._C = c;
}
}
假设A始终是一个只读属性,那么处理可能影响A输出的任意数量的附加属性的好方法是什么?我觉得这是一种糟糕的(完全错误的!)方法,因为我应该总是能够检索我分配的值。例如,如果我赋值B = 3,那么我应该能够在下次调用B时得到3,而不是得到_A * _C。
然而,我需要这种类型的相互依赖存在(或者实现相同目标的完全不同的方法)。所有的值都是相关的,所以我需要一个值的变化反映在其他值中。
我就是想不出合适的方法来做这件事。
编辑
我做了一个坏榜样。实际上,非A值并不依赖于A,而只是相互依赖——B影响C, C影响D,等等;然而,A就是这些值的某个组合。我不确定这对如何最好地处理这个问题是否重要,但我认为值得一提。似乎称它为属性A并不能很好地描述它。如果你有一个叫做SolveForA()
的方法,它会更有意义。其他人也一样。使用WriteOnly属性可能仍然有意义,但我也会使用这些方法。
在我看来,在给出的示例中属性被滥用了。你已经注意到,我们可以预期,如果我们将设置值,我们也将能够得到相同的值。如果重构代码是我的工作,我想我会从这样的开始:
public class Blah
{
public double A { get; private set; }
public double B { get; set; }
public double C { get; set; }
public double CalculateB()
{
...
}
public double CalculateC()
{
...
}
public Blah(){}
public Blah(double b, double c)
{
this._B = b;
this._C = c;
}
}