2013-01-11 27 views
0

如果你不應該使用私人設置者來實現自動屬性(不好的做法),那麼我怎樣才能從類中私下設置私密設置器,並且仍然只是公開獲取? (可以說我想在構造函數級別設置它,但仍然允許它通過獲取公開)?替代自動屬性中的私人設置者

例如類:

public class Car 
{ 
    //set the property via constructor 
    public SomeClass(LicensePlate license) 
    { 
     License = license 
    } 

    public LicensePlate License{get; private set;} // bad practice 
} 
+7

你能否引用你聽說私人定製者對自動屬性不好的地方?我第一次聽到這個消息。 – itsme86

+2

我知道私密或其他不可訪問/缺少'get'是不好的做法,但我不知道爲什麼'private set'會不好。 –

回答

4

您的財產轉換爲一個與支持字段並沒有setter。

public class Car 
{ 
    LicensePlate _license; 

    public Car(LicensePlate license) 
    { 
     _license = license; 
    } 

    public LicensePlate License 
    { 
     get { return _license; } 
    } 
} 
+0

我不想用舊的風格:)。爲什麼在第一時間私底下設置制定者甚至是不好的做法? – PositiveGuy

+0

@CoffeeAddict不是。你能告訴我你爲什麼這麼想嗎?使我更喜歡沒有setter和後臺領域的屬性的唯一原因是,VS中的Intellisense沒有像前者那樣具有不同的圖標 - 因此您可能不知道,只需查看圖標,如果一個汽車財產有一個公共設置者/吸氣者。 – Mir