Вы МОЖЕТЕ сделать его более сложным и иметь значение IsChanged bool, и если что-то в объекте изменится, установите IsChanged в значение true, а затем пересоберите строку, иначе верните последнюю построенную строку, но тогда вам нужно будет добавить синхронизацию и это, вероятно, не будет стоить затрат.
Итак, длинное и короткое то, что второй случай, как правило, лучший. Это просто, понятно и эффективно.
ОБНОВЛЕНИЕ : Трудно сказать, какой здесь сценарий обновления. Итак, давайте посмотрим на несколько.
1). Если вы обновляете строку только по требованию из приложения, и эта строка создается с использованием какого-либо сложного метода, просто выберите новый метод обновления, а затем верните текущую строку в качестве свойства. Затем вы можете просто запросить свойство MyString, и это будет простой возврат.
public class SomeClass
{
public string MyString { get; private set; }
public void UpdateString(...)
{
// DO YOUR COMPLEX LOGIC
MyString = ... new value ...
}
}
2). Или, если это просто простая строка без сложной логики, вы можете поручить приложению создать и назначить ее:
public class SomeClass
{
public string MyString { get; set; }
}
...
myObj.MyString = SomeComplexLogicToBuildString();
Но, как я уже сказал, это только в том случае, если строковое представление не зависит от состояния объекта.
3). Если оно основано на состоянии объекта и изменяется при изменении состояния объекта, вы можете позволить воссозданию строки при каждом изменении:
public class SomeClass
{
private bool _hasChanged = true;
private string _previousString = null;
public string MyString
{
get
{
if (_hasChanged)
{
_hasChanged = false;
_previousString = .... your complex string building logic ....
}
return _previousString;
}
}
public int OtherProperties
{
get { return _otherField; }
set { _otherField = value; _hasChanged = true; }
}
Но еще раз, вы, вероятно, захотите синхронизировать это, если это многопоточное использование.
НО Это все ЕСЛИ вы хотите кэшировать значение, чтобы оно не перестраивалось каждый раз как ответственность самого класса.
Действительно, ваша самая простая и лучшая ставка - просто использовать второй метод, и если вы используете его несколько раз в одном методе, просто установите временную переменную и используйте ее.