Каков наилучший способ реализовать свойство, которое доступно только для чтения, но доступно для записи наследникам?
-
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; }
}
Наличие сеттера и геттера на самом деле не лучше, чем наличие переменной на этом уровне видимости.
Поэтому вы можете просто сделать саму переменную защищенной, а читатель - открытым.
Тем не менее, сеттеры и геттеры являются показателем плохого ОО - вы уверены, что они вам нужны? Вы должны попросить объект сделать что-то со своими членами, не спрашивая его о своих членах, а затем манипулировать ими вне объекта.
Это очень общее правило, и есть много исключений.