2008-10-20 35 views

回答

36
private object m_myProp; 
public object MyProp 
{ 
    get { return m_myProp; } 
    protected set { m_myProp = value; } 
} 

或者在C#3.0

public object MyProp {get; protected set;} 
+0

如果需要使用'Interlocked`方法,`protected`字段將被證明是優越的。我覺得奇怪的是C#暴露了與事件同名的事件委託,但根本不公開自動屬性支持變量。 – supercat 2012-10-10 18:27:13

0

有一個setter和getter是不是真的比任何具有知名度的那個水平變量更好。

因此,您可以讓變量本身受保護,並讓讀者公開。

也就是說,setter和getters是糟糕的OO指標 - 你確定你需要它們嗎?你應該要求對象與其成員做某事,而不是要求它的成員在對象之外操縱它們。

這是一個非常普遍的規則,並且有很多例外。

+2

廢話; getter/setter *明顯優於受保護的字段。 getter/setters是*不是*糟糕的OO指標:它們展示封裝並允許多態性(通過虛擬) - 您想要怎樣的OO? – 2008-10-20 21:13:04

+0

他們仍然暴露你的類的實現,並且表明你正在獲取數據,而不是讓一個類爲你做一個操作。這不是面向對象,程序員在實際獲得面向對象之前使用它是假的。 – 2008-10-20 23:10:06

5

這絕對是要走的路。

public object MyProp {get; protected set;} 

如果您使用的是舊版本的C#,那麼這是要走的路。

private object _myProp; 
public object MyProp 
{ 
    get { return _myProp; } 
    protected set { _myProp = value; } 
} 
相關問題