2014-02-20 3 views
0

У меня есть основы со свойствами, но я не вижу для них реального использования. Разве это не возвращает значение уравнения? Я имею в виду, что нет смысла использовать свойство, если бы вы могли просто написать для него простое уравнение.Что особенного в свойствах?

Например:

int currentValue; 

public int CurrentValue 
{ 
    get { return currentValue; } 
    set { currentValue = value; } 
} 

это то же самое, как только:

currentValue; 

Другой пример:

int currentValue; 

public int CurrentValue 
{ 
    get { return currentValue * 5; } 
    set { currentValue = value; } 
} 

это то же самое, как:

currentValue = currentValue * 5; 
+4

Я не уверен, что я следую за вами или вы не имеете основы вниз :). – nphx

+2

Вы имеете в виду «Разве это не то же самое, что выставлять поле?» ответ - нет, по разным причинам. См. Http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –

+0

+1 Для '' ..properties, но я не вижу реального использования для них. '' – gleng

ответ

4

В вашем первом примере 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 стандарт)

1

Свойства Getters и seters удобны, если вы хотите добавить дополнительную функциональность в свой код, чтобы централизовать вашу функцию, чтобы вы могли изменить ее только в одном месте. Вы почти никогда не знаете, когда вам придется что-то менять, но вы можете подготовиться.

Это, наряду с концепциями инкапсуляции и сокрытия информации, основные концепции ООП, но очень важно ...


V E R Y     I M P O R T A N T


Не стоит недооценивать эту огромную силу D:

Его так ... мощный ...

0

Свойства также используются в ряде других.NET, WPF не работает без них (с вызовом PropertyChanged в setter), а WCF широко использует их в контрактах с данными.

Специально для WPF сила свойств заключается в том, что поля «получить» и «установить» - это функции и поэтому могут делать много вещей, кроме как только вернувшись, либо настроив резервный частный член. Это приносит больше времени, чем вы думаете.

Пример свойства (для WPF)

public String UIDisplayedString 
{ 
    get { return _member; } 
    set 
    { 
     _member = value; 
     PropertyChanged(new PropertyChangedEventArgs("UIDisplayedString")); 
    } 
Смежные вопросы