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