Какой смысл в пустых методах получения и установки, и, следовательно, в чем смысл автоматической генерации методов получения и установки в c #? - PullRequest
3 голосов
/ 04 марта 2012

Я иногда использую {get;set;} в c #, потому что мне говорят, что иногда технологии, с которыми я работаю, требуют их (linq2sql?)

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

Я понимаю, что логика внутри метода получения или установки имеет смысл, но не настолько уверена в отношении пустых?

Является лиответьте так же, как этот пост, если это так, просто скажите мне об этом!

Какой смысл автоматически генерировать геттеры / сеттеры для полей объектов в Scala?

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

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

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

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

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

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

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

1 голос
/ 04 марта 2012

Одной из причин является наследование, так как ваша ссылка уже указывает

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

public String ReadOnlyString {get; private set;}
...