2012-01-24 49 views
2
private readonly PlayerCollection players = new PlayerCollection(); 

public PlayerCollection Players { get { return players; } } 

性質:私營準備只支持字段與自動實現+構造

public PlayerCollection Players { get; private set; } 

public MyClass() 
{ 
    Players = new PlayerCollection(); 
} 

這將是最好?有兩種方法中最適合的環境嗎?

回答

4

那麼第一種方法的優點是字段爲readonly,所以你不能在課堂上的其他地方重新設置它;第二種方法的優點是,它不是,所以你可以。在我看來,這是決定它們之間的好方法 - 你是否希望該字段爲readonly?如果是這樣,第一種方式;如果沒有,第二種方式。

1

在第一種情況下,編譯器將確保該值即使在MyClass之內也不能更改。否則,它可能是一個洗,挑你更喜歡。

0

使用自動實現。你必須在構造函數中只讀初始化,並且幾乎從不使用私有和只讀方法。

至少自動實現解決方案允許您在構造函數之外進行初始化,並且仍然只允許從其內部進行賦值。

+2

我不同意「幾乎從不使用私有和只讀」,因爲它防止你改變對象的值(當它是私有的時候)是非常有用的。實際上我會說公共只讀組合不太有用,因爲你很少需要公共領域(屬性通常更合適)。 – asmo

+0

我一直使用'private readonly'作爲「常量」,在編譯時無法知道緩存鍵或字體對象。 – millimoose

1

從來電者的角度來看,兩者沒有區別。但是,在第一個示例中,沒有人(甚至沒有MyClass)可以將Player設置爲構造函數外的新PlayerCollection。如果您希望編譯器強制執行此限制,請使用(1)。否則,使用(2)。