예제 #1
0
        public static T ReflectGet <T>(this UnityEngine.Object target, string fieldName)
        {
            FieldInfo  field;
            ReflectDef def = new ReflectDef(target.GetType(), fieldName);

            if (fieldCache.ContainsKey(def))
            {
                field = fieldCache[def];
            }
            else
            {
                field           = target.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
                fieldCache[def] = field;
            }

            return((T)field.GetValue(target));
        }
예제 #2
0
        public static void ReflectSet(this UnityEngine.Object target, string fieldName, object value)
        {
            FieldInfo  field;
            ReflectDef def = new ReflectDef(target.GetType(), fieldName);

            if (fieldCache.ContainsKey(def))
            {
                field = fieldCache[def];
            }
            else
            {
                field           = target.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
                fieldCache[def] = field;
            }

            field.SetValue(target, value);
        }
예제 #3
0
        public static object ReflectInvoke(this UnityEngine.Object target, string methodName, params object[] parameters)
        {
            MethodInfo method;
            ReflectDef def = new ReflectDef(target.GetType(), methodName);

            if (methodCache.ContainsKey(def))
            {
                method = methodCache[def];
            }
            else
            {
                method           = target.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
                methodCache[def] = method;
            }

            return(method.Invoke(target, parameters));
        }