Я понимаю множество преимуществ предоставления интерфейса для косвенного доступа к членам класса. Мой вопрос: разве это не то, чего вы можете достичь практически на любом языке ОО, используя (что-то вроде)
public int NormalClass::getQuality() {
return this->quality;
}
и
protected void NormalClass::setQuality(int q) {
this->quality = q;
}
Какие дополнительные преимущества предлагает свойства .NET, помимо эстетики?
Я приму «читабельность», если вы сможете привести веские аргументы в пользу этого; но лично я склонен думать, что функция get / set более читаема, чем свойство, поскольку она однозначно является функцией , а не прямым значением.
РЕДАКТИРОВАТЬ: Спасибо всем за ответы! Это было действительно информативно для меня; Подводя итог тому, что я собрал / узнал из всего сказанного, приведу несколько выводов, к которым я пришел:
- Наибольшие преимущества свойств
исходить не из особенностей
сами свойства, а точнее
от фреймворка и возможностей IDE, которые
обрабатывать свойства особым образом;
например, редактор свойств, XML
сериализация, привязка данных.
- Свойства можно рассматривать как простые
значения определенными удобными способами
что получить / установить функции не могут: в
в частности, obj.Prop ++ и obj.Prop =
значение.
- Свойства позволят вам уйти
с быстрым и грязным кодом, используя
публичные участники без прохождения
головная боль реализации связки
функции get / set позже; если ты
когда-нибудь нужно будет добавить немного логики
и / или сделать публичного члена частным,
Вы можете просто ввести свойство
и не рискуйте нарушать любой старый код.
Итак, есть один момент, который был сделан в 2 или 3 ответах, так что я лично нахожу несколько сомнительным: свойства подразумевают недорогие операции чтения / записи и поэтому могут использоваться по существу так же, как и простые переменные. Моя проблема с этим моментом заключается в том, что нет ничего, присущего свойствам, которые фактически обеспечивают это; это просто, как они предполагается , которые будут использоваться. На мой взгляд, это аналог квалификатора shouldBePrivate, который указывает, что значение следует напрямую доступно только его собственному классу, но к нему все равно можно получить доступ извне; или полицейские силы, которые патрулируют улицы, чтобы напомнить нам, что мы должны вести себя сами, но на самом деле не вмешиваются, когда мы начинаем совершать преступления (если это не применяется, что это на самом деле делает для нас?) .
Я был бы более впечатлен этим моментом, если бы в свойствах был какой-то встроенный механизм для обеспечения дешевизны чтения / записи.