2012-07-26 74 views
3

比方說,我有2個屬性是set&get等價於get&private set的顯式只讀屬性嗎?

public readonly list<int> numberListReadonly { get; set; } 

public list<int> numberListPrivateSet { get; private set; } 

對於那些財產我可以在富構造/私有函數,我可以啓動這些名單沒有錯誤

public Foo() 
{ 
    numberListReadonly = new list<int>(); 
    numberListPrivateSet = new list<int>(); 
} 

public void FooInside() 
{ 
    numberListReadonly = new list<int>(); 
    numberListPrivateSet = new list<int>(); 
} 

當我從外面訪問類

void FooOutside() 
{ 
    Foo.numberListReadonly = new List<int>(); 
    Foo.numberListPrivateSet = new List<int>() 
} 

編譯器拋出預期的錯誤。
「Foo.numberListReadonly不能被分配到 - 它是隻讀」
「Foo.numberListPrivateSet不能被分配到 - 它是隻讀」


我做這似乎是一個搜索的「普遍做法「是使用私有集合上的」只讀「屬性,具有」集合「類別的能力
因此是一個明確的只讀屬性集合&獲得等價於獲得&私有集合?

回答

2

不,他們是不同的。 C#中的只讀修飾符通常用於將字段(非屬性)標記爲只讀。該屬性允許在相同類的構造函數中設置字段值。

真正的只讀屬性的推薦方法是省略setter。私人二傳手簡單地表明,該屬性不能設置在課堂之外。

+0

是,公開只讀列表 numberListReadonly {get;組; }不是一個有效的語句,readonly關鍵字不適用於屬性,編譯器在構建之前不會發出警告 – 2012-07-26 06:40:40

3

私訂意味着你可以在任何地方類改變成員的值。只讀設置意味着它只能在構造函數中設置,從而保證在其他地方不會更改。

+0

我有同樣的想法,但當我嘗試設置屬性的構造函數,即FooInside()和編譯器不抱怨它,所以我想知道爲什麼 – 2012-07-26 03:01:11

+0

如果它是隻讀的,它將失敗。如果它有一個私人設置訪問器,它不會失敗。 – 2012-07-26 03:03:10

3

使用只讀的概念是 - 您可以在初始化時分配值,而不是在此之後。這就是爲什麼 - 只讀。

私人設置有不同的圖片,它允許您在任何時間點修改值,但只能在課程級別內修改。

希望這會消除你的懷疑。