Возможный дубликат:
Конвенционный вопрос: когда вы используете функцию Getter/Setter, а не свойство?
В последнее время я столкнулся с множеством разных мнений о геттерах и сеттерах, поэтому я решил, что должен сделать это в своем собственном вопросе.
Мой предыдущий вопрос получил немедленный комментарий ( позже удалено), что указанные сеттеры не должны иметь побочных эффектов, и метод SetProperty
был бы лучшим выбором.
Действительно, похоже, что это мнение Microsoft а> также. Однако их свойства часто вызывают события, такие как Resized
, когда установлено свойство формы Width
или Height
. OwenP также заявляет, что «вы не должны позволять свойству вызывать исключения, свойства не должны иметь побочных эффектов, порядок не должен иметь значения, и свойства должны возвращаться относительно быстро».
Тем не менее Майкл Стам утверждает, что при проверка данных в сеттере. Если ваш установщик не выдает исключение, как вы можете эффективно проверять данные, так как многие ответы на этот вопрос предложить?
Как насчет того, когда вам нужно вызвать событие, как это делают почти все элементы управления Microsoft? Разве вы не во власти тех, кто подписался на ваше мероприятие? Если их обработчик выдает огромное количество информации или сам выдает ошибку, что происходит с вашим сеттером?
Наконец, как насчет ленивой загрузки внутри геттера? Это также может нарушить предыдущие рекомендации.
Что допустимо поместить в геттер или сеттер, а что следует оставить только в методах доступа?
Изменить:
Из другой статьи в MSDN :
Методы
get
иset
в целом ничем не отличаются от других методов. Они могут выполнять любую программную логику, генерировать исключения, переопределяться и объявляться с любыми модификаторами, разрешенными языком программирования. Обратите внимание, однако, что свойства также могут быть статическими. Если свойство является статическим, существуют ограничения на то, что могут делать методыget
иset
. Подробности смотрите в справочнике по языку программирования.