2009-12-06 5 views
11

Можно создать дубликат:
Properties vs MethodsКогда использовать свойство по сравнению с методом?

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

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

ответ

12

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

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

+6

Не бросать исключения? Что бы вы сделали, если значение установлено как недопустимое значение? Я думал, что это была одна из причин использования свойств над полями ... возможность делать проверки на значение, прежде чем принимать его. – Svish

5

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

Это от MSDN: «Особенности Рекомендации по использованию» http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx Смотрите раздел «Свойства и методы»:

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

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

это подчеркнет его наиболее when to use a method:

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

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

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

0

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

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

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

0

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

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

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

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

Смежные вопросы