也许属性不是这样的方式,但我很难找到一个好的解决方案的答案。
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而不是获得_A * _C时,我应该能够得到3。
但是,我需要存在这种相互依赖性(或者实现相同目标的完全不同的方法)。所有的值都是相关的,所以我需要将一个值的变化反映在其他值中。
我无法找到合适的方法来做到这一点。
修改
我做了一个坏榜样。实际上,非A值不依赖于A,而只相互依赖 - B影响C,C影响D等;但是,A只是这些值的某种组合。不确定这对于如何最好地接近这一点很重要,但认为值得一提。
答案 0 :(得分:3)
似乎称它为属性A并不能真正描述它。如果你有一个名为SolveForA()
的方法,它会更有意义。其他人也一样。使用WriteOnly属性仍然有意义,但我也会制作这些方法。
答案 1 :(得分:0)
在我看来,在示例中,属性被滥用。您已经注意到我们可以预期,如果我们设置值,我们也可以获得相同的值。如果重构代码是我的工作,我想我想从以下内容开始:
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;
}
}