Решение специфической задачи инициализации - C#
Формулировка задачи:
Привет всем. Помогите написать элегантный код. Поясню на примере. Что есть сейчас:
Особенности. Функции Calculate_A() и Calculate_B() выполняются долго. Поэтому их вызов происходит только при обращении. Более того, между вызовами функции Refresh() эти величины остаются теми же, поэтому нет смысла их пересчитывать.
private Type1 A_value; private Type2 B_value; private bool A_calculated; private bool B_calculated; public void Refresh() { A_calculated = false; B_calculated = false; } public Type1 A { get{ if(A_calculated) return A_value; else A_value = Calculate_A(); A_calculated = true; return A_value; } } public Type2 B { get{ if(B_calculated) return B_value; else B_value = Calculate_B(); B_calculated = true; return B_value; } }
Что получилось
: при данном подходе достаточно неудобно добавлять новые методы: если я решу добавить свойство Type3 C, то мне необходимо будет также добавить (кроме самого свойства): 1) переменную C_ccalculated 2) В функцию Refresh() строку С_calculated = false;Что я хочу:
как то унифицировать эти свойства, чтобы добавить новое свойство было бы проще, не пришлось бы вспоминать куда нужно дописать строчку сброса флага.Как это сделать?
как вариант можно было бы написать контейнер, но я не могу придумать как, т.к. тип у меня разный. Посоветуйте пожалуйста кто разбирается.Решение задачи: «Решение специфической задачи инициализации»
textual
Листинг программы
public void refresh() { lazyA = new Lazy<Type1>(); lazyB = new Lazy<Type2>(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д