2009-02-18 111 views
2

假設我有一個暴露一個財產的類。在班級內部使用私人「持有人變量」是否被認爲是一個很好的方法?或者我也應該使用該財產供內部使用。公共財產的類內部使用

要解釋,我應該使用:

public class foo 
{ 
    String _statusHolder; 
    public String myStaus 
    { 
     get { return _statusHolder; } 
     set{ _statusHolder = value; } 
    } 

    public void DisplayMyStatus() 
    { 
     Console.WriteLine(_statusHolder); 
    } 
} 

或者:

public class foo 
{ 
    String _statusHolder; 
    public String myStaus 
    { 
     get { return _statusHolder; } 
     set{ _statusHolder = value; } 
    } 

    public void DisplayMyStatus() 
    { 
     Console.WriteLine(myStaus); 
    } 
} 

,我可以把它看作是beeing更加一致和更具可讀性使用第二種方法。如果我稍後在聲明中做一些修改,它也會更加有效。但是有沒有任何性能問題,或者出於某種原因被認爲是不好的做法?


編輯:

似乎每個人都在向內部使用屬性傾斜。我最初的想法是一樣的,但作爲一個新手程序員,你永遠無法知道。 感謝大家的快速反饋!

回答

2

我傾向於去調用屬性將導致一次的東西變得複雜的時候,你可以把在吸氣

鎖定和業務邏輯對於C#3.0我的東西去沿着這些路線(只有明確創建的支持領域的真正需要時)

public class foo 
{ 

    public String Status 
    { 
     get; 
     set; 
    } 

    public void DisplayMyStatus() 
    { 
     Console.WriteLine(Status); 
    } 
} 
+0

請注意,在這個例子中,可以明確地將setter設置爲private。所以變量只能由這種類型的成員寫入。 – 2009-02-18 07:29:53

3

性能問題應該是可以忽略不計,因爲JITer或編譯器將愉快地工作了,你的函數調用(該屬性的getter)不會做任何令人興奮的,可內聯。

的好處是業務邏輯,未來的變化可能被放置在getter方法,你的類將自動乘虛而入,不重構太多。

當然,缺點是,在某些情況下,您可能希望避免使用新的業務邏輯,因此需要根據a)邏輯的變化情況來考慮這一點,b)該邏輯可能需要被規避。

內部使用的屬性的其他(電勢)的優點是可以容易地移動到或從自動屬性。

+0

性能問題可以忽略不計。如果你分析你的代碼,你會發現它在頻繁訪問的屬性上浪費1-5%的CPU。這個問題很微妙,因爲JIT編譯器只會在程序未連接調試器時啓動時優化代碼(內聯)。 – 2009-02-18 07:35:16

2

如果有一個使用屬性。無論您訪問變量的位置如何,屬性都可能具有懶惰初始化等副作用。

即使屬性現在有沒有副作用,其他開發人員可以以後再添加它們,並在使用「原始」變量地方可能出錯,因爲新的代碼不被調用。

最後,該性質使得重構變得容易,例如,當該值以後不再存儲在一個變量中,但屬性訪問內部計算或來自其他來源的變量。

1

編程在Java中,我更喜歡使用getter方法,因爲我可以把一個斷點和/或查看日誌輸出更改。

相關問題