В Настройщике свойств выгодно только устанавливать, если значение отличается?

2

Мне интересно, какие преимущества имеет этот код:

    private int _TestID;
    public int TestID
    {
        get 
        { 
            return _TestID;
        }
        set
        {
            if(_TestID != value)
            {
                _TestID = value;
            }
        }
    }

против. это:

    private int _TestID;
    public int TestID
    {
        get 
        { 
            return _TestID;
        }
        set
        {
            _TestID = value;
        }
    }

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

  • 0
    разница в производительности незначительна.
Теги:
performance
properties

5 ответов

14
Лучший ответ

Это полезно, когда вы объединяете его с RaisePropertyChanged ( "TestID" ) (внутри if, после установки значения поля), который часто встречается с WPF или другими решениями для привязки данных.

class Something : INotifyPropertyChanged
{
      public int TestID 
      {
           get { return testId; }
           set 
           {
                if (testId != value)
                {
                     testId = value;
                     RaisePropertyChangedEvent("TestID");
                }
           }
      }
 }
  • 2
    + 1..Я согласен с этим ответом, но в его примере не было упоминания о RaisePropertyChanged или каких-либо событиях по этому вопросу.
  • 0
    Неплохо подмечено!
Показать ещё 3 комментария
1

Это тип оптимизации, который я с удовольствием оставил бы в компиляторе. Я бы не хотел "заставлять" эффективность, которая может быть или не быть правдой в любой ситуации.

0

Я думаю, что код примера, который вы дали, не совсем корректен. Вы имели в виду это?

private int _TestID;
public int TestID
{
    get
    {
        return _TestID;
    }
    set
    {
        if (_TestID != value)
        {
            _TestID = value;
        }
    }
}

Причина этой конструкции мне тоже непонятна. Если, однако, _TestID будет свойством вместо int, то эта конструкция может быть полезна, поскольку установка _TestID в этом случае может быть дорогостоящей операцией.

  • 0
    Спасибо, что поймали мою опечатку. Это сейчас исправлено.
  • 0
    Но если бы testID был настолько сложным, что его установка была бы дорогой, вполне вероятно, что тестирование также было бы очень дорогим.
0

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

0

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

Это также ненужное расширение строк кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню