他のいくつかのプライベート変数に基づいて値を計算するパブリック読み取り専用プロパティがあります。計算されたプロパティから多くのことを読み取ります。計算で使用される変数はめったに変化しません。現在、読み取り専用のゲッターに計算ロジックを実行させていますが、従属変数が変更されたときに新しい値をプロパティにプッシュする方が理にかなっています。
私の現在のコードの例:
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 が 1 回変更されると推定します。
単純な掛け算であれば気にしませんが、実際の計算は複雑で、多くの実行時間が余分な計算の繰り返しに費やされています。
私はそれを修正するために次のことができることを知っています:
...
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() メソッドに移動できることはわかっていますが、実際のコードでは、プライベート値に影響を与えるメソッドは 1 つだけではありません。すべての出現を見つけるために自分のコードをくまなく調べる必要はありません。そうするのは保守的ではないようです。
2番目の方法は行く方法ですか?機能することはわかっていますが、何かがおかしいと感じています。私の懸念は、プライベート プロパティの値をプライベート変数に格納するのは奇妙に思えることだと思います。私はこれを考えすぎているかもしれません。