奇妙な癖があるようです...少なくとも同僚によると。私たちは小さなプロジェクトに一緒に取り組んできました。私がクラスを書いた方法は(簡単な例)です:
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
したがって、基本的に、ゲッターが呼び出され、フィールドがまだnullの場合にのみ、フィールドを初期化します。これは、どこでも使用されていないプロパティを初期化しないことにより、過負荷を軽減すると考えました。
ETA:私がこれを行った理由は、私のクラスに別のクラスのインスタンスを返すいくつかのプロパティがあり、さらにそれがさらに多くのクラスを持つプロパティを持つということです。最上位クラスのコンストラクターを呼び出すと、これらすべてのクラスが常に必要であるとは限らない場合、これらすべてのクラスのすべてのコンストラクターが呼び出されます。
個人的な好み以外に、この慣行に反対することはありますか?
更新:私はこの質問に関して多くの異なる意見を検討しました、そして私は私の受け入れられた答えを待ちます。しかし、今ではコンセプトの理解が深まり、いつ使用するか、いつ使用しないかを決めることができます。
短所:
- スレッドセーフティの問題
- 渡された値がnullの場合、「setter」リクエストに従わない
- マイクロ最適化
- 例外処理はコンストラクターで行う必要があります
- クラスのコードでnullをチェックする必要があります
長所:
- マイクロ最適化
- プロパティがnullを返すことはありません
- 「重い」オブジェクトの読み込みを遅延または回避する
ほとんどの短所は私の現在のライブラリには当てはまりませんが、「マイクロ最適化」が実際に何かを最適化しているかどうかをテストする必要があります。
最後の更新:
さて、私は私の答えを変更しました。私の最初の質問は、これが良い習慣かどうかでした。そして、今はそうではないと確信しています。たぶん、私は現在のコードのいくつかの部分でそれをまだ使用しますが、無条件にそして絶対に常にではありません。使用する前に、習慣をなくして考えてみます。みんな、ありがとう!