我有一个公共只读属性,它根据其他几个私有变量计算它的值。我从计算的属性中读了很多。计算中使用的变量很少改变。我目前让只读的 getter 执行计算逻辑,但是当因变量发生变化时,将新值推送到属性中对我来说更有意义。
我当前代码的一个示例:
public class rectangle()
{
public rectangle(int height, int width)
{
_height = height;
_width = width;
}
public void resize(int heightOffset, int widthOffset)
{
_height += heightOffset;
_width += widthOffset;
}
private int _height;
private int _width;
public int area
{
get
{
return _height * _width;
}
}
}
上面的代码过于简化,但很好地表达了我的意思。_height 和 _width 可以改变,但他们很少这样做。area 属性被大量读取...我估计每读取 area 属性 100,000+ 次,_height/_width 就会更改一次。
现在,如果它只是乘法,我不会担心......但实际计算很复杂,我看到很多运行时间陷入重复的多余计算中。
我知道我可以执行以下操作来修复它:
...
private int _height;
private int height
{
set
{
_height = value;
_area = _height * _width;
}
}
private int _width;
private int width
{
set
{
_width = value;
_area = _height * _width;
}
}
private int _area;
public int area
{
get
{
return _area;
}
}
...
考虑到我的情况,上面的代码更有意义,但在我看来,必须有更好的方法来做到这一点。我知道,鉴于我的第一个示例,我可以摆脱属性并将计算逻辑移动到 resize() 方法......但在实际代码中,它不仅仅是影响私有值的一种方法。我不想梳理我的代码来查找每一个事件,而且这样做似乎不可维护。
第二种方法是要走的路吗?我知道它有效,但感觉有些不对劲。我认为我担心的是,将私有属性的值存储到私有变量中似乎很奇怪。这点我可能想多了。