Каков наилучший способ реализовать свойство, которое доступно только для чтения, но доступно для записи наследникам? - PullRequest
10 голосов
/ 21 октября 2008

Если у меня есть свойство, которое я хочу разрешить писать наследникам, но сохранять внешне только для чтения, каков предпочтительный способ реализации этого? Я обычно иду с чем-то вроде этого:

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

Есть ли лучший способ?

Ответы [ 3 ]

36 голосов
/ 21 октября 2008
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;}
5 голосов
/ 21 октября 2008

Это, безусловно, путь.

public object MyProp {get; protected set;}

Если вы используете более старую версию C #, то это путь.

private object _myProp;
public object MyProp
{
    get { return _myProp; }
    protected set { _myProp = value; }
}
0 голосов
/ 21 октября 2008

Наличие сеттера и геттера на самом деле не лучше, чем наличие переменной на этом уровне видимости.

Поэтому вы можете просто сделать саму переменную защищенной, а читатель - открытым.

Тем не менее, сеттеры и геттеры являются показателем плохого ОО - вы уверены, что они вам нужны? Вам следует попросить объект сделать что-то со своими членами, не спрашивая его о членах, а затем манипулировать ими вне объекта.

Это очень общее правило, и есть много исключений.

...