10

如果我有一个我想让继承者写入的属性,但在外部保持只读,那么实现它的首选方法是什么?我通常会这样:

private object m_myProp;
public object MyProp
{
    get { return m_myProp; }
}
protected void SetMyProp(object value)
{
    m_myProp = value;
}

有没有更好的办法?

4

3 回答 3

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;}
于 2008-10-20T21:07:13.087 回答
5

这绝对是要走的路。

public object MyProp {get; protected set;}

如果您使用的是旧版本的 C#,那么这是要走的路。

private object _myProp;
public object MyProp
{
    get { return _myProp; }
    protected set { _myProp = value; }
}
于 2008-10-20T21:10:15.170 回答
0

拥有一个 setter 和 getter 并不比拥有一个可见性级别的变量更好。

因此,您可以只使变量本身受保护并将阅读器公开。

也就是说,setter 和 getter 是糟糕的 OO 的一个指标——你确定你需要它们吗?您应该要求对象对其成员做某事,而不是要求它为其成员然后在对象之外操作它们。

这是一个非常普遍的规则,也有很多例外。

于 2008-10-20T21:10:08.633 回答