2016-04-04 71 views
2

屬性獲取者有多少邏輯太多?例如,我有一個看起來像這樣的代碼。屬性獲取者的邏輯

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

我已閱讀各種帖子,說屬性代碼不應該很貴。但是'昂貴'這個詞對我來說有點模糊。

回答

2

一般來說,在OOP中,一個getter(setter)也應該是一個平凡的操作。你上面發佈的內容很簡單,取決於實際情況是什麼

您提到「昂貴」對您而言是一個模糊的術語。一個操作是在計算上很昂貴意味着它將需要很長時間才能完成(通常是因爲它必須完成大量的計算 - 這是過於簡單化,而是一個體面的近似)。例如,考慮:

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

在這個例子中,條件是微不足道的,並且你的程序將通過這個塊幾乎即時地收縮。在另一方面:

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

假設some_slow_function並實際運行緩慢,該塊將需要很長的時間才能返回_value,使得它不再平凡。如果經常調用這個getter,some_slow_function也會經常被調用,導致它阻塞你的程序並導致它運行緩慢。

+0

這些條件將採取另一個類的一些(布爾)字段。這仍然是微不足道的? –

+0

@PaoloGo:假設這些領域使用的getters不算昂貴,那麼你很好。 –

+0

好的。謝謝!我試着用模擬類來測試它,if塊不會影響getter的性能。我想這一切都將歸結爲實際的'另一個'類的字段的getter的實現。 –

1

只要沒有等待或更改值,就可以使用邏輯。你也應該關心沒有太多的例外。一般的都不錯,定製的太多了。

吸氣劑是爲了即時工作。有了這一點,就有了你的邏輯極限。保持安全,它即時運作,然後它可以。

1

MSDN說:

屬性是成員提供了一個靈活的機制來讀,寫 或計算私有字段的值。屬性可以使用 就好像它們是公共數據成員一樣,但它們實際上是特殊的 稱爲訪問器的方法。這使得數據可以很容易地被訪問,同時仍然提供方法的安全性和靈活性。

所以只要你的屬性的getter是冪等,並進行快速(即,不產生任何性能瓶頸)它是好的。

+1

定義*快* * –

+0

@PatrickHofman: - 快,我的意思是如果它沒有創造任何性能瓶頸! –