Вот более правильная версия, IMO:
private int _age;
public int Age {
get { return this._age ; }
protected set { this._age = value; }
}
или просто:
public int Age { get; protected set; }
Если вы правильно инкапсулируете его, тогда не имеет значения как это поле называется, поскольку ничего вне этого типа не может видеть его.
В комментариях поднимается вопрос о событиях, например:
protected EventHandler<StateChangedEventArgs> _stateChanged;
public event EventHandler<StateChangedEventArgs> StateChanged
{
add { lock (this.StateChanged) { this._stateChanged += value; } }
remove { lock (this.StateChanged) { this._stateChanged -= value; } }
}
Здесь я снова утверждаю, что нет причины для защиты этого поля;событие не принадлежит к производному классу.Он может выполнять 2 разумные операции:
- вызывать событие
- подписываться / отписываться на событие
Первое должно быть сделано черезшаблон On*
;последний должен просто использовать обычные средства доступа (в противном случае это нарушает блокировку).Кроме того, , даже если мы предполагаем, что lock(this.StateChanged)
является опечаткой (это было бы очень, очень плохо для использования в качестве объекта блокировки -it не будет работать вообще ), обратите внимание, что в C # 4.0 встроенный компилятор имеет гораздо более эффективную стратегию блокировки (которая использует Interlocked
, а не Monitor
), когда вы пишете «похожее на поле» событие (т. Е. Не явно add
)/ remove
).Следовательно, предпочтительный подход здесь был бы:
public event EventHandler<StateChangedEventArgs> StateChanged;
protected virtual void OnStateChanged(StateChangedEventArgs args) {
var snapshot = StateChanged; // avoid thread-race condition
if(snapshot != null) shapshot(this, args);
}
и ... вот и все!
- , если подкласс хочет подписаться / отписаться (не идеально, но ме) этопросто использует
StateChanged +=
и StateChanged -=
- , если подкласс хочет вызвать событие, он вызывает
OnStateChanged(...)
- , если подкласс хочет настроить логику события, он добавляет
override
до OnStateChanged
не нужно никаких не приватных полей.