Мне интересно, какие преимущества имеет этот код:
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;
}
}
Мне кажется, что это было сделано во имя эффективности (только установка, если она отличается), но не будет ли тест проходить так долго (или дольше), что начальный набор? Я не уверен, что я здесь что-то пропустил, но хотел бы услышать любые комментарии и объяснения.
Это полезно, когда вы объединяете его с RaisePropertyChanged ( "TestID" ) (внутри if, после установки значения поля), который часто встречается с WPF или другими решениями для привязки данных.
class Something : INotifyPropertyChanged
{
public int TestID
{
get { return testId; }
set
{
if (testId != value)
{
testId = value;
RaisePropertyChangedEvent("TestID");
}
}
}
}
Это тип оптимизации, который я с удовольствием оставил бы в компиляторе. Я бы не хотел "заставлять" эффективность, которая может быть или не быть правдой в любой ситуации.
Я думаю, что код примера, который вы дали, не совсем корректен. Вы имели в виду это?
private int _TestID;
public int TestID
{
get
{
return _TestID;
}
set
{
if (_TestID != value)
{
_TestID = value;
}
}
}
Причина этой конструкции мне тоже непонятна. Если, однако, _TestID будет свойством вместо int, то эта конструкция может быть полезна, поскольку установка _TestID в этом случае может быть дорогостоящей операцией.
Действительно, я думаю, что первый пример вызовет больше проблем, когда речь заходит о сложных типах и перегрузке операторов. В этом конкретном случае первый пример довольно бессмыслен.
Если производительность является единственной проблемой здесь, я бы выбрал первую. Даже если есть разница в производительности, она будет слишком маленькой, чтобы заметить.
Это также ненужное расширение строк кода.