Если вы не сохраняете значение в приватном поле, тогда да, он будет пересчитываться при каждом доступе.
Способ кэширования результатов будет
private int? _result;
public int Result {
get {
if (!_result.HasValue) {
_result = A*B;
}
return _result.Value;
}
}
Здесь есть несколько предостережений.
Сначала , если все ваши операции не соответствуют константам, компилятор автоматически оптимизирует их для вас.Это означает, что операция умножения фактически не будет выполняться во время выполнения.Это означает, что вы не должны беспокоиться об этом.
Секунда , если операция ограничена выполнением простой арифметической операции с двумя существующими переменными, то вычисление ее каждый раз будет быстрее, чем«если» тест выше.Кроме того, локальное хранилище с приватным полем в этом случае увеличит объем используемой памяти без всякой на то причины.
Третий , если базовые переменные изменили между вызовамиполучатель свойства (т. е. A или B имеет новое значение), тогда NOT будет перерасчитано с этими новыми значениями.
Что оставляет нам одну из немногих причин для фактического использования вышеуказанногоcode: операция занимает много времени, и данные, с которыми она работает, не меняются между вызовами свойства.Единственная другая причина, по которой я могу подумать в данный момент, это использовать это, если свойство является объектом, который должен быть создан перед вызовом.