Где должен строка между свойством и методом быть? [дубликат]

12
задан Community 23 May 2017 в 12:22
поделиться

6 ответов

Я обычно преобразовываю свойство в функцию, если оно имеет одно из следующих поведений

  • Вызывает побочный эффект (кроме установки опорного поля)
  • Реализация дорогая по сравнению с доступом к полю
  • Реализация имеет более высокую сложность, чем Log(N)
  • Может выбросить исключение
10
ответ дан 2 December 2019 в 18:18
поделиться

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

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

Я нашел интересный текст об этом

MSDN | Свойства против методов

EDIT

Там говорится следующее:

Используйте свойство, когда

  • Член является логическим членом данных

Используйте метод, когда

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

Я лично выбираю сложность и то, что будет делать метод / свойство. Если я просто устанавливаю значение, например _name = something ;, то я использую свойство. Даже если я собираюсь выполнить очень простые вычисления или условные выражения, я буду придерживаться свойства. Но если что-то требует серьезной или даже умеренной работы, я бы использовал метод. Ничто не раздражает меня больше, чем установка свойства, и внезапно выполняется целая куча кода, больше, чем я ожидал.

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

Еще одно соображение - возможность привязки. Большинство фреймворков могут привязываться только к свойствам. Например, если вы хотите, чтобы IsValid можно было использовать в привязке (скажем, в качестве источника привязки для свойства IsEnabled кнопки OK), тогда это должно быть свойство, а не метод.

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

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

Например, если вы хотите проверить, обновлен ли определенный пользовательский ввод, и вы можете сделать это с помощью своего уникального запатентованного алгоритма, используйте метод Validate () . Если пользователь просто отправляет вам форму, в которой указывается, что текущий адрес действителен, используйте свойство valid . Но это просто общий подход, который может варьироваться в зависимости от того, чего вы на самом деле хотите.

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

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