Когда использовать свойство против метода?

Возможный дубликат:
Свойства vs Методы

Есть ли какое-либо правило или общая рекомендация относительно того, когда использовать свойство против метода? Технически любой метод без параметров может быть сделан в свойстве, и любое свойство может быть сделано методом, но иногда, когда решать, когда использовать один из другого, может быть размыто.

Я надеялся получить некоторые правила, которые вы, ребята, имели в виду при принятии решения между ними.

Ответ 1

Общий стандарт касается побочных эффектов. Если, вызывая член для получения значения, вы получаете только это значение, это свойство. Если есть побочные эффекты, вероятно, это должен быть метод.

Иными словами, свойства, даже если они не являются полями, должны вести себя как поля. Это означает, что вы не вызываете побочных эффектов, не занимая слишком много времени и не бросая исключений.

Ответ 2

Чтобы добавить к тому, что сказал cletus.

Это из msdn: "Правила использования свойств" http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx См. Раздел "Свойства против методов":

  • Операция - это преобразование, например Object.ToString.
  • Операция достаточно дорогая, что вы хотите сообщить пользователю, что они должны учитывать кеширование результата.
  • Получение значения свойства с помощью get accessor будет иметь наблюдаемый побочный эффект.
  • Вызов члена дважды подряд дает разные результаты.
  • Порядок выполнения важен. Обратите внимание, что свойства типа должны быть установлены и извлечены в любом порядке.
  • Элемент статический, но возвращает значение, которое можно изменить.
  • Элемент возвращает массив. Свойства, возвращающие массивы, могут вводить в заблуждение. Обычно необходимо возвращать копию внутреннего массива, чтобы пользователь не мог изменить внутреннее состояние. Это, в сочетании с тем, что пользователь может легко предположить, что это индексированное свойство, приводит к неэффективному коду. В следующем примере кода каждый вызов свойства Методы создает копию массива. В результате в следующем цикле будет создано 2n + 1 копия массива.

Ответ 4

использовать свойство, когда какое-то свойство er.. быстро работает (например, ctrl.Color, ctrl.Text, ctrl.Width, DateTime.Now). но если это означает процесс, используйте метод (например, str.GetHash(), machine.GetFqdn(), file.GetMd5()). поэтому в файле md5 вы не сделаете это свойство

это подчеркивает это наиболее когда использовать метод:

Операция достаточно дорога, чтобы вы хотите сообщить пользователю что они должны рассмотреть вопрос о кешировании результат.

Обратите внимание, что .NET DateTime.Now, хотя быстрая, как есть, и свойство, нужно было кэшировать, когда он вызывается несколько раз в вашей программе, даже рядом друг с другом. они решили сделать это свойством, свойство имеет ощущение текучести в нем, в отличие от того, когда вы вызываете метод, у него нет ощущения мгновенности/текучести в нем. поэтому вам нужно учитывать, что даже когда вы получаете значение и нужно кэшировать, но если ему нужно чувствовать мгновенно, обязательно используйте свойство.

В конце концов, если что-то действительно быстро и не похоже на дорогостоящую операцию, оно должно иметь конструкцию, которая может передать ее устойчивость. Я думаю, именно поэтому .NET привлекателен (или любой язык, на котором есть свойство), он не заставляет разработчиков использовать метод, когда вы можете сделать его свойством, он не заставляет разработчиков использовать метод, когда вы можете сделать исполнительный код вокруг перегруженных операторов, это прагматическое программирование в лучшем случае

Ответ 5

Это хороший вопрос. Я не знаю об этом. На мой взгляд, это обычно вопрос здравого смысла.

Принадлежности связаны с самим объектом/классом и обычно описывают его. Наилучшим примером является элемент пользовательского интерфейса, Background, Color, IsEnabled.

Обычно это методы, которые объект/класс может выполнять и могут делать результаты. Лучший пример здесь - метод Show MessageBox. он выполняет действие и возвращает результат.

Ответ 6

На фундаментальном уровне решение о выборе свойства или метода зависит от аргумента 'has', 'does'. Если требуемая информация является атрибутом или качеством, перейдите со свойствами. Если это действие, то методы.

Но на практическом уровне это может быть трудно реализовать так все время.

  • Как было правильно указано, свойства должны быть легкими, а методы не обязательно.
  • Если информация зависит от некоторого кода инициализации, вызываемого в конструкторе, вы должны предпочесть свойство.
  • Если вашей информации требуется много операций, используйте методы.
  • Если он влияет на третий элемент, такой как файл или экран или что-то еще, используйте методы.
  • У вас не могут быть свойства, которые ничего не возвращают (void).

Ответ 7

Говоря об основных словах, свойство описывает объект, а метод - это действие, которое может выполнять объект. Для объекта, представляющего автомобиль, drive() будет методом, а color будет свойством.