Задать вопрос

В чем разница между get/set и обычной переменной?

Часто вижу в коде подобное:

public int trade_id { get; set; }
public string type { get; set; }
public string quantity { get; set; }
public string price { get; set; }
public string amount { get; set; }
public int date { get; set; }


И я не понимаю зачем люди так делают. Ладно бы они в этих свойствах указывали какие-то проверки или еще что-то. Но ведь можно объявить обычную переменную.
В общем, если не сложно, объясните пожалуйста, только без ссылок.
  • Вопрос задан
  • 774 просмотра
Подписаться 3 Простой 3 комментария
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C#
Главная архитектурная причина одна - выставить стабильный интерфейс в виде свойства, оставляя за собой возможность поменять его реализацию. Это позволит в будущем сделать какие-то из свойств вычислимыми, или, как уже отметил Hemul GM , добавить проверки каких-нибудь условий/инвариантов. При этом не потребуется пересобирать клиентский код.

Правда осознанно это делают только авторы библиотек/nuget-пакетов (публичных или приватных, в рамках компании), остальные скорее потому, что так сказали.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
В чем преимущество автосвойств, если по сути они просто обращаются к автоматически создаваемой переменной, почему бы напрямую не обратиться к переменной без автосвойств? Дело в том, что в любой момент времени при необходимости мы можем развернуть автосвойство в обычное свойство, добавить в него какую-то определенную логику.
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
Что будет, если всё же в будущем решишь добавить проверку? А я скажу, что будет, будешь переписывать код везде, где используешь эту переменную) А умные люди добавят setter или getter метод и всё сразу будет работать.
Ответ написан
Если опустить философские размышления об инкапсуляции и о расширении, то остаётся не так уж и много.

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

В целом, никаких проблем при использовании свойств, кроме дополнительных 9 символов нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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