Уместно ли запускать событие "свойство изменено", когда фактическое значение свойства не изменяется?
public int SomeProperty
{
get { return this.mSomeProperty; }
set
{
this.mSomeProperty = value;
OnPropertyChanged(new PropertyChangedEventArgs("SomeProperty"));
}
}
Это вызовет событие, даже если новое значение будет идентично старому значению. Это плохая практика?
Лучшая практика - не бросать событие, если значение не изменилось.
В вашем случае свойство является просто "int", поэтому это просто простая проверка равенства. Если ваше свойство было объектом в его собственном праве, есть еще несколько случаев, чтобы рассмотреть
Вы снова установите тот же экземпляр - Без изменений свойств
Вы устанавливаете другой экземпляр с разными значениями - выбросите изменение свойства
Вы устанавливаете другой, но "равный" экземпляр (т.е. два разных объекта имеют один и тот же набор значений и могут считаться эквивалентными с точки зрения вашего приложения). Выбросьте изменение свойства.
Последний вопрос подлежит обсуждению... действительно ли свойство действительно изменилось, когда все его атрибуты одинаковы? Если кто-то использует это изменение свойства, чтобы подписаться на изменения в подклассе, им нужно будет знать, чтобы отказаться от подписки из старого класса и подписаться на новый. Поэтому я ошибаюсь на стороне объявления об изменении.
Если у вас было событие с именем PropertySetterAccessed
, тогда было бы уместно его запустить, когда значение не изменится. Однако ваше событие называется PropertyChanged
, поэтому его следует запускать только тогда, когда это произошло. Если ваши события/методы/классы и т.д. Не делают "то, что они говорят на олове", вы создаете кошмар для обслуживания для кого-то.
Нет, не запускайте событие, если базовое значение фактически не изменилось.
Обычно вы кодируете Setter таким образом, чтобы он даже не пытался изменить базовое значение, если оно фактически не отличается.