Возможный дубликат:
Вопрос о конференции: когда вы используете функцию Getter/Setter вместо использования свойства
В последнее время я столкнулся с множеством разных мнений о Getters and Setters, поэтому решил, что должен внести свой вопрос в свой вопрос.
A предыдущий вопрос получил немедленный комментарий (позже удаленный), в котором утверждалось, что сеттеры не должны иметь никаких побочных эффектов, а метод SetProperty
лучший выбор.
В самом деле, это похоже на мнение Microsoft. Однако их свойства часто вызывают события, такие как Resized
, когда задано свойство Width
или Height
. OwenP также гласит: "Вы не должны допускать исключения свойств, свойства не должны иметь побочных эффектов, порядок не должен иметь значения, а свойства должны возвращаться относительно быстро".
Тем не менее Michael Stum утверждает, что при проверке данных внутри сеттера следует исключать исключения. Если ваш сеттер не генерирует исключение, как вы могли бы эффективно проверять данные, как предлагают многие ответы на этот вопрос?
Как насчет того, когда вам нужно поднять событие, как, например, почти все Microsoft Control? Разве вы не на милость тех, кто подписался на ваше мероприятие? Если их обработчик выполняет огромное количество информации или выдает ошибку, что происходит с вашим сеттером?
Наконец, как насчет ленивой загрузки в getter? Это также может нарушить предыдущие рекомендации.
Что приемлемо для размещения в getter или setter, и что следует хранить только в методах доступа?
Edit:
От другого статьи в MSDN:
Методы
get
иset
обычно не отличаются от других методов. Они могут выполнять любую программную логику, исключать исключения, переопределяться и объявляться любыми модификаторами, допускаемыми языком программирования. Обратите внимание, однако, что свойства также могут быть статическими. Если свойство является статическим, существуют ограничения на то, что могут сделать методыget
иset
. Подробнее см. В описании языка программирования.