Свойства предназначены для очень простых членов класса; получение или установка значения свойства следует рассматривать как тривиальную операцию без существенных побочных эффектов .
Если установка свойства приводит к изменению открытых значений класса, отличного от назначенного свойства, это более важно, чем базовое назначение, и, вероятно, больше не подходит для свойства.
«Сложное» свойство опасно, потому что оно не соответствует ожиданиям звонящих. Свойства интерпретируются как поля (с побочными эффектами), но как поля, вы ожидаете, что сможете назначить значение, а затем впоследствии получить это значение. Таким образом, вызывающая сторона должна ожидать, что она сможет назначить несколько свойств и получить их значения позже.
В вашем примере я не могу присвоить значение обоим свойствам и получить их; одно значение повлияет на другое. Это нарушает фундаментальные ожидания собственности. Если вы создадите метод для одновременного присвоения значений обоим свойствам и сделаете оба свойства доступными только для чтения, станет намного проще понять, где установлены значения.
Дополнительно, в сторону:
Обычно считается плохой практикой возвращать временный массив из свойства. Массивы могут быть неизменяемыми, но их содержимое - нет. Это означает, что вы можете изменить значение в массиве, которое будет сохраняться вместе с объектом.
Например:
YourClass i = new YourClass();
i.IndividualStrings[0] = "Hello temporary array!";
Этот код выглядит так, как будто он изменяет значение в свойстве IndividualStrings
, но на самом деле массив создается свойством и нигде не назначается, поэтому массив и изменение немедленно выпадут из области видимости.
public string ActualProperty { get; set; }
public string[] GetIndividualStrings()
{
return ActualProperty.Split(.....);
}
public void SetFromIndividualStrings(string[] values)
{
// join strings from array .... ;
}