Каков наилучший способ реализовать свойство, которое доступно только для чтения, но доступно для записи наследникам?

StackOverflow https://stackoverflow.com/questions/219904

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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;}

Другие советы

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

public object MyProp {get; protected set;}

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top