using System; using System.Collections.Generic; public class ViConstValue { public ViConstValue(string key, T defaultValue) { _node.Data = defaultValue; ViConstValueList.Attach(key, _node); } public static implicit operator T(ViConstValue data) { return data.Value; } public T Value { get { return _node.Data; } } ViDoubleLinkNode2 _node = new ViDoubleLinkNode2(); } // internal class ValueList { public T _value; public bool _init = false; public ViDoubleLink2 _list = new ViDoubleLink2(); } // public static class ViConstValueList { public static void AddValue(string key, T value) { ValueList list; if (_values.TryGetValue(key, out list)) { list._value = value; list._init = true; list._list.SetValue(value); } else { list = new ValueList(); list._value = value; list._init = true; list._list.SetValue(value); _values.Add(key, list); } } internal static void Attach(string key, ViDoubleLinkNode2 node) { ValueList list; if (_values.TryGetValue(key, out list)) { if (list._init) { node.Data = list._value; } list._list.PushBack(node); } else { list = new ValueList(); list._list.PushBack(node); _values.Add(key, list); } } private static Dictionary> _values = new Dictionary>(); } public class Demo_ConstValue { #pragma warning disable 0219 static ViConstValue ScriptConstValue = new ViConstValue("INT", 1); // static void Func() { int value = ScriptConstValue; } // public static void Test() { Func(); ViConstValueList.AddValue("INT", 100); Func(); } #pragma warning restore 0219 }