2011-05-07 58 views

回答

4

如果您在該方法中訪問Me.P(或_p)幾十萬次,則將該屬性複製到局部變量會加快速度。但是,對於大多數情況,這不是一個問題,所以你可以做任何一個,也不會有明顯的差異。

我通常贊成讓代碼更容易理解,所以我希望訪問該屬性,除非您發現需要額外的性能。 Me.P_p更容易理解。

+1

'將屬性複製到局部變量會加快速度' - **可能**取決於JIT引擎優化的能力 – sehe 2011-05-07 20:42:07

3

至於編碼風格,我會非常喜歡你沒有分配P_p。當追蹤代碼以查看P的使用位置時,我會錯過它的_p版本。我不認爲速度差異是相當大的。

2

你似乎在做的只是混淆你的代碼。只需直接使用該財產。除了讓您的代碼更易於遵循外,沒有任何影響。

2

這是合理的,因爲屬性的性質。屬性允許用戶返回更改並指定代碼來格式化給定屬性的返回值。您不希望每次使用相同的方法引用該代碼時都運行該代碼。

這裏是C#代碼。我相信你會明白它做什麼,即使不熟悉C#:

public int MyNumber 
{ 
    get 
    { 
     return GetValueFromDatabase(); 
    } 
} 

public void main() 
{ 
    lblFirst.Text = MyNumber; 
    lblSecond.Text = MyNumber; 
    lblThird.Text = MyNumber; 
} 

在這個例子中,該數據庫已經叫了三次,而不是在它被調用一次以下幾點:

public void main() 
{ 
    int _myNumber = MyNumber; 
    lblFirst.Text = _myNumber; 
    lblSecond.Text = _myNumber; 
    lblThird.Text = _myNumber; 
} 

請記住,只是因爲你的財產目前沒有做任何形式的計算並不意味着它不會在未來。你不想編寫代碼,以便稍後再回來修改幾個不同的地方,只是因爲代碼的一行更改。

3

這取決於您的getter是否在執行任何操作,而不是返回已經計算的值。如果你的吸氣器真的只是作爲一個公共變量,那麼性能下降可以忽略不計。另一方面,如果你的getter正在進行任何計算,那麼每次調用該屬性時它都會變慢,它必須運行它中的代碼。

2

自動實現的屬性具有與傳統合成器相同的性能,因爲編譯器將生成與未生成自動實現屬性的普通類相同的生成方式。

無需擔心性能。只要不需要在屬性內部實現更多邏輯,就可以獲得短格式的好處。

2

我只做這個作爲消除代碼重複的手段。如果該屬性不止一次使用,那麼我使用「Introduce Variable」重構來替換包含相同值的本地屬性。

否則,我認爲沒有理由這樣做,很多理由不這樣做。

相關問題