В вашем первом примере Public Fields versus Automatic Properties - хороший ответ. В принципе, вы должны использовать всегда свойства вместо полей для не private
вещей. Это позволяет вам делать такие вещи, как модифицировать код позже, не нарушая работу, и сделать private set
. Свойства также могут делать такие вещи, как уведомлять код, когда они изменяются, или легко предоставлять значения по умолчанию или расчетные значения. И вы можете использовать авто-свойство, чтобы сократить посторонний код:
public int CurrentValue { get; set; }
Вашего второй пример не хорошее использование свойств, так как она нарушает предположения о том, как работает свойство. Например. если я установил свойство 3
, и никакое исключение не будет выбрано, я ожидаю, что это будет 3
, когда я получу его, а не 15
. currentValue = currentValue * 5;
, который может иметь смысл работать с полем, свойством или локальной переменной, делает значение 5
раз больше. Может быть, вы имели в виду что-то вроде этого:
int currentBackingValue;
public int CurrentValue
{
get { return currentBackingValue * 5; }
}
Без set
, это может работать хорошо, и без нарушения каких-либо соглашений и допущений: CurrentValue
рассчитывается на основе currentBackingValue
.
(как в сторону, следует иметь в виду, что get
Ослабляет и set
Ослабляет о собственности, на самом деле, методы, используется только с синтаксисом поля, как заменить что-то вроде в Java getX
/setX
стандарт)
Я не уверен, что я следую за вами или вы не имеете основы вниз :). – nphx
Вы имеете в виду «Разве это не то же самое, что выставлять поле?» ответ - нет, по разным причинам. См. Http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –
+1 Для '' ..properties, но я не вижу реального использования для них. '' – gleng