Когда использовать свойство по сравнению с методом? [дубликат]

C# с 27 непробельными символами - включает вызов.

Action a = null;
a = () => a();
a();
12
задан Community 23 May 2017 в 11:46
поделиться

7 ответов

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

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

12
ответ дан 2 December 2019 в 18:19
поделиться

В дополнение к сказанному Клетусом.

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

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

Я бы взглянул на это сообщение SO о свойствах и методах.
В нем упоминается рассмотрение Выбор между свойствами и методами

2
ответ дан 2 December 2019 в 18:19
поделиться

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

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

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

0
ответ дан 2 December 2019 в 18:19
поделиться

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

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

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

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

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

Операция достаточно дорогая, чтобы но если это означает процесс, используйте метод (например, str.GetHash (), machine.GetFqdn (), file.GetMd5 ()). поэтому в файле md5 вы не сделаете его свойством

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

Операция достаточно дорогая, чтобы но если это означает процесс, используйте метод (например, str.GetHash (), machine.GetFqdn (), file.GetMd5 ()). поэтому в файле md5 вы не сделаете его свойством

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

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

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

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

1
ответ дан 2 December 2019 в 18:19
поделиться

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

0
ответ дан 2 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: