У меня есть класс под названием «RelativeData», который используется для сравнения значений через конечный автомат. Я пытаюсь создать класс, который принимает моментальные снимки данных с заданными интервалами. Интервалы: StateBegins, StateMachineBegins и тот, с которым у меня возникает проблема, liveValue. Задача im having - liveValue (s), которые я хочу отслеживать, находится в отдельном классе. Существует большой список значений, которые я хочу добавить в трек с моими объектами RelativeData, поэтому мой класс должен быть общим.C# Сохранение общей ссылки для самообновления снимков
Цель этого класса - делать снимки данных.
class RelativeData<T>
{
T initialValue;
T stateValue;
T liveValue; //currently not implemented, since i can't store a ref
public void StateMachineActive(T curValue)
{
initialValue = curValue;
}
public void StateUpdated(T curValue)
{
stateValue = curValue;
}
}
бывший) а float
называется "энергия", которая принадлежит к заклинанию. Когда состояние машина активирует, он вызывает StateMachineActive
в моем списке relativeData, который предпочтительно может внутренне обновление с помощью liveValue, вместо того, чтобы пройти curValue
Текущее исправление) У меня есть менеджер, который добавляет эти значения в словари родового типы.
Dictionary<myKey,relativeData<bool>> relativeBoolData
Dictionary<myKey,relativeData<float>> relativeFloatData
& и т.д ... Однако назвать StateUpdated, мне нужно, чтобы передать текущее значение, которое мне нужно, чтобы получить от большого коммутатора при помощи MYKEY. Doable, но в C++ я мог просто хранить T *. Невозможно включить небезопасный режим, поскольку Unity, похоже, не позволяет этого. Я мог бы иметь фактические значения, только что хранящиеся там, но тогда каждый раз, когда я хочу получить currentValue (который происходит чаще, чем получение относительного значения) во всем коде, это увеличит сложность (будьте более интенсивными). По крайней мере, я предполагаю.
Вопрос: 1) Могу ли я хранить указатель на Icomparable тип? Могу ли я иметь значение liveValue для типа valueType/Primitive data (т. Е. Int, long, enum) в другом месте, как я мог в C++ с T *. Я знаю, что могу передать «ref», но я не могу его сохранить.
2) Должен ли я просто сохранить фактические значения там вместо этого, и все будет восстановлено с помощью двухуровневого коммутационного футляра (Сначала, чтобы узнать, какой dict для вызова, float, bool ... и затем извлечь значение), это не слишком сильно увеличивает время выполнения? Неориентированные значения: энергия, стабильность и т. Д. Используются непрерывно в заклинаниях для внутренних расчетов. Относительный используется только для конечного автомата. (может иметь сразу 2 ~ 60 заклинаний)
3) Является ли это всего лишь плохим шаблоном, есть ли лучший образец, который я просто не вижу, лучший способ сделать снимки общих данных?
4) Я знаю, что массивы по ref, но это будет означать, что мои исходные данные должны были стать массивами правильно?
5) Должен ли я просто оставить это так, как есть. Он работает, чуть-чуть грязнее и медленнее.
все они IComparable
: Ints, поплавки, BOOLS, перечислений ..