2016-04-04 11 views
2

プロパティゲッターのロジックがどれくらいですか? たとえば、次のようなコードがあります。プロパティゲッターのロジック

public double value 
    { 
     get 
     { 
      if (condition1 
       || condition2 
       || condition3 
       || condition4) 
      { 
       _value = anotherValue; 
      } 
      return _value; 
     } 
    } 

プロパティ内のコードが高価であってはならないというさまざまな記事を読んでいます。しかし、「高価」という言葉は私にはあまりにも曖昧です。

答えて

2

一般に、OOPではゲッター(セッターも)は簡単な操作でなければなりません。あなたが上に掲示したものは、実際にはどのような条件でであるかによって、簡単にです。

"高価な"という言葉はあなたにはあまり意味がありません。演算がで計算上高価なであることは、完了に時間がかかることを意味します(通常、多くの計算を完了する必要があります - それは単純すぎますが、まあまあ近似です)。たとえば、考えてみます。

if (a == 5 
    || b == true 
    || c == "FOO!" 
    || d == 3.14159) 
{ 
    _value = anotherValue; 
} 
return _value; 

をこの例では、条件は自明であり、あなたのプログラムは、近瞬時にこのブロックを通じてクランチます。一方:some_slow_functionが実際に遅くないと仮定すると、

if (some_slow_function()) 
{ 
    _value = anotherValue; 
} 
return _value; 

、このブロックは、それはもはや自明で作っていない、_valueを返すために長い時間がかかります。このゲッターが頻繁に呼び出されると、some_slow_functionも頻繁に呼び出され、プログラムのボトルネックを引き起こし、プログラムをゆっくり実行させます。

+0

この条件では、別のクラスのいくつかの(ブール値の)フィールドが使用されます。それはまだ簡単なことでしょうか? –

+0

@PaoloGo:これらのゲッターが使用するゲッターが計算上高価ではないとすれば、あなたはいいです。 –

+0

申し訳ございません。ありがとう!私はモッククラスでテストしようとしましたが、ifブロックはゲッターのパフォーマンスには影響しません。私はそれが実際の「別の」クラスのフィールドのゲッターの実装にすべて来ると思う。 –

1

待機または値の変更がない限り、ロジックを使用できます。あなたはまた、あまりにも多くの例外を除いてはならないことに気を付けるべきです。一般的なものは大丈夫です、カスタムはあまりにも多くです。

ゲッターは即座に動作するようになっています。この点には、論理の限界があります。それを瞬時に安全に保ち、その後は大丈夫です。

1

MSDNは言う:

プロパティは、 書き込みを読んで、またはプライベートフィールドの値を計算するための柔軟なメカニズムを提供するメンバーです。プロパティは公共のデータメンバであるかのように のように使用できますが、実際にはアクセッサと呼ばれる特別なメソッド です。これにより、データに容易にアクセスできるようになります。 安全性と柔軟性を提供します。

だから限り、あなたのプロパティのゲッターは、(すなわち、任意のパフォーマンスのボトルネックを作成していない)冪等と高速実行しているとして、それは大丈夫です。

+1

* fast * ... –

+0

を定義します。@PatrickHofman: - パフォーマンスがボトルネックにならない場合は、速く、私は意味しました! –

関連する問題