2016-03-12 101 views
0

我正在尋找有關使用自動實現的屬性時的最佳做法的建議。C#自動實現的屬性 - 使用內部類

如果我不需要引用類中的屬性,我總是使用它們。但是,如果需要訪問類內的屬性,我習慣於手動添加私有屬性。

舉例來說,如果我有一個名爲人與firstName和lastName屬性的類,我從來沒有操縱類中的數據,我只想做:

public class Person 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
} 

但是,如果我需要做的與這些屬性的東西我這樣做:

public class Person 
{ 
    private string _firstName; 
    public string firstName 
    { 
     get { return _firstName; } 
     set { _firstName = value; } 
    } 

    private string _lastName; 
    public string lastName 
    { 
     get { return _lastName; } 
     set { _lastName = value; } 
    } 

    public void testMethod() 
    { 
     Debug.Print(_firstName + " " + _lastName); 
    } 

} 

我的問題:這是好的做法?

+0

你應該能夠直接使用類內的屬性 –

+0

你在這裏的推理是什麼?爲什麼不使用類內的自動屬性?你關心性能嗎? – GrahamS

+0

如果要覆蓋屬性,請使用「虛擬」關鍵字聲明要覆蓋的屬性 –

回答

1

不,這沒有意義。當您需要做的不僅僅是設置/獲取後臺字段時,您應該轉移到完全實施的屬性。

就目前情況來看:

Debug.Print(FirstName + " " + LastName); //convention says use UpperCamel for props 

是絕對罰款和引入後備場只是帶來不必要的噪音,你的代碼。

相反,如果你想要做一些驗證:

public string LastName 
{ 
    get { return _lastName; } 
    set { 
     if(value.Contains("!")){ 
      throw new Exception("names can't contain '!'"); 
     } 
     _lastName = value; } 
} 

現在你有一個正當的理由,從自動實現屬性移開。

如果您只是想避免第二次查找的開銷,請不要擔心。很有可能這絕不會導致性能問題,如果是這樣,您會通過測量代碼時間找到答案。試圖以犧牲清晰度爲代價來編寫最優效率的代碼是一個糟糕的目標,並且會導致嚴重的代碼。每次都贊同清晰度,當程序運行緩慢時,可以返回並找出造成它的原因。研究已經證實,這個機會不會是你所期望的,所以這不是一個試圖猜測的經濟追求。

+0

確切地說,當你獲得價值並直接賦值時,它看起來很奇怪。 –

+0

認爲簡單,清晰,可讀的代碼是比過早優化更重要的目標。請記住,有兩種不同的方式來設置值可能會導致以後混淆。 – GrahamS

+1

好的,謝謝你的回覆spender和@GrahamS。我懷疑在這個問題上的表現永遠不會是一個實際問題。這主要是它的主要原因。這感覺像是一個額外的步驟。我清楚地說明了這一點。 JITter的觀點回答了我在開始時的看法。令人失望的是,有些人認爲可以投下這個問題。畢竟,這是一個問題,而不是一個建議,並且投票結果不利於人們提出這些問題並學習更好地編寫代碼。 – Sparked