Ответ 1
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
protected set { m_myProp = value; }
}
Или в С# 3.0
public object MyProp {get; protected set;}
Если у меня есть свойство, которое я хочу, чтобы наследователи пишут, но сохраняя readonly извне, какой предпочтительный способ реализовать это? Я обычно говорю что-то вроде этого:
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; }
}
Или в С# 3.0
public object MyProp {get; protected set;}
Это определенно путь.
public object MyProp {get; protected set;}
Если вы используете более старую версию С#, то это путь.
private object _myProp;
public object MyProp
{
get { return _myProp; }
protected set { _myProp = value; }
}
Наличие сеттера и получателя на самом деле не лучше, чем наличие переменной на этом уровне видимости.
Поэтому вы можете просто сделать эту переменную самой защищенной и публичной.
Тем не менее, сеттеры и геттеры являются индикатором плохого ОО - вы уверены, что в них нуждаетесь? Вы должны попросить объект что-то сделать со своими членами, не спрашивая его о своих членах, а затем манипулировать им вне объекта.
Это очень общее правило, и есть много исключений.