Метод по сравнению со Свойством в C# - что различие [копирует]

Что-то, что сделано с репозиториями Мерзавца, должно использовать эти tag объект. Это может использоваться для меток фиксации с любым видом строки и может использоваться для маркировки версий. Вы видите, что теги в репозитории с эти git tag команда, которая возвращает все теги.

легко проверить тег. Например, если существует тег v1.1, можно проверить тот тег к ответвлению как это:

git checkout -b v1.1

, Поскольку это - объект верхнего уровня, Вы будете видеть целую историю к той фиксации, а также мочь выполнить diffs, внести изменения и слияния.

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

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

8 ответов

Вот хороший набор рекомендаций о том, когда использовать свойства и методы из Билла Вагнера (исправлено link)

  • Используйте свойство, когда все это верно: Получатели должны быть простыми и, следовательно, вряд ли будут генерировать исключения. Обратите внимание, что это подразумевает отсутствие доступа к сети (или базе данных). Любой из них может выйти из строя и, следовательно, вызвать исключение.
  • Они не должны иметь зависимости друг от друга. Обратите внимание, что это будет включать установку одного свойства и его влияние на другое. (Например, установка свойства FirstName повлияет на доступное только для чтения свойство FullName, которое состоит из свойств имя + фамилия, подразумевает такую ​​зависимость)
  • Они должны быть установлены в любом порядке
  • Получатель не имеет наблюдаемого побочный эффект Обратите внимание, что это руководство не исключает некоторых форм отложенного вычисления свойства.
  • Метод всегда должен возвращать немедленно. (Обратите внимание, что это исключает свойство, которое выполняет вызов доступа к базе данных, вызов веб-службы или другую аналогичную операцию).
  • Используйте метод, если член возвращает массив.
  • Повторные вызовы метода получения (без промежуточного кода) должны возвращать то же значение.
  • Повторные вызовы установщика (с тем же значением) не должны давать никаких отличий от одиночного вызова.

  • Получение не должно возвращать ссылку на внутренние структуры данных (см. Пункт 23). Метод может вернуть полную копию и может избежать этой проблемы.

54
ответ дан 27 November 2019 в 06:44
поделиться

Для такого свойства

private string _name;
public string Name { get { return _name; } set { _name = value; } }

можно написать следующие два метода:

public string get_Name() { return _name; }
public void set_Name(string value) { _name = value; }

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

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

12
ответ дан 27 November 2019 в 06:44
поделиться

Свойство - это не что иное, как синтаксический сахар. В некоторых случаях лучше определить свойство, а не метод, потому что он более ясен / читабелен.

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

Фактически, свойство реализовано как один или два метода; в зависимости от того, есть ли у вашего свойства сеттер или нет. Свойство транслируется в методы get_xxx и set_xxx.

8
ответ дан 27 November 2019 в 06:44
поделиться

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

3
ответ дан 27 November 2019 в 06:44
поделиться

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

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

DTO, например, не что иное, как куча хорошо написанных свойств, эффективно разделяющих данные и поведение. Вы бы вообразили, что без DTO тесно связывает свой DataGrid или Dropdown со сложным методом бизнес-логики?

Проще говоря, методы действительно выполняют работу ... Свойства либо побуждают к действию, либо получают статус.

Хотя вы можете используйте код метода внутри своих свойств ... это не то, для чего они предназначены. Даже если вам нужно, вам лучше сделать чистый вызов другого метода внутри свойства, а не писать в нем свой код. HTH!

4
ответ дан 27 November 2019 в 06:44
поделиться

По сути, свойство - это пара методов - getProperty и setProperty. Это всего лишь условность / упрощение.

Предполагается, что средство получения свойств не имеет побочных эффектов (ну, они могут иметь определенные побочные эффекты, такие как ленивая загрузка).

1
ответ дан 27 November 2019 в 06:44
поделиться

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

1
ответ дан 27 November 2019 в 06:44
поделиться

По сути, нет никакой разницы (кроме зарезервированного идентификатора "value" в установщике).

Геттеры и сеттеры внутренне транслируются в стандартные методы, так что среда выполнения не знает, связан ли какой-либо геттер или сеттер с определенным свойством. Термин «синтаксический сахар» часто используется для таких удобных конструкций.

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

Обычным вариантом использования для выполнения небольшой дополнительной работы является, например, установка или получение свойства, которое напрямую не поддерживается полем члена. Например, вы У нас есть класс, содержащий, скажем, значение, представляющее расстояние. Ваш класс может предоставить два свойства: километры и мили с соответствующими установщиками и получателями. Затем вы бы сделали простые преобразования в одной паре и сэкономили бы, чтобы сохранить значение дважды.

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

2
ответ дан 27 November 2019 в 06:44
поделиться
Другие вопросы по тегам:

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