如果我有一個屬性,我想讓繼承者寫入,但保持只讀外部,實現此目的的首選方法是什麼?我通常走這樣的事情:實現只讀給公衆但可寫入繼承者的屬性的最佳方法是什麼?
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
}
protected void SetMyProp(object value)
{
m_myProp = value;
}
有沒有更好的方法?
如果我有一個屬性,我想讓繼承者寫入,但保持只讀外部,實現此目的的首選方法是什麼?我通常走這樣的事情:實現只讀給公衆但可寫入繼承者的屬性的最佳方法是什麼?
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
}
protected void SetMyProp(object value)
{
m_myProp = value;
}
有沒有更好的方法?
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;}
有一個setter和getter是不是真的比任何具有知名度的那個水平變量更好。
因此,您可以讓變量本身受保護,並讓讀者公開。
也就是說,setter和getters是糟糕的OO指標 - 你確定你需要它們嗎?你應該要求對象與其成員做某事,而不是要求它的成員在對象之外操縱它們。
這是一個非常普遍的規則,並且有很多例外。
廢話; getter/setter *明顯優於受保護的字段。 getter/setters是*不是*糟糕的OO指標:它們展示封裝並允許多態性(通過虛擬) - 您想要怎樣的OO? – 2008-10-20 21:13:04
他們仍然暴露你的類的實現,並且表明你正在獲取數據,而不是讓一個類爲你做一個操作。這不是面向對象,程序員在實際獲得面向對象之前使用它是假的。 – 2008-10-20 23:10:06
這絕對是要走的路。
public object MyProp {get; protected set;}
如果您使用的是舊版本的C#,那麼這是要走的路。
private object _myProp;
public object MyProp
{
get { return _myProp; }
protected set { _myProp = value; }
}
如果需要使用'Interlocked`方法,`protected`字段將被證明是優越的。我覺得奇怪的是C#暴露了與事件同名的事件委託,但根本不公開自動屬性支持變量。 – supercat 2012-10-10 18:27:13