public override ScriptObject GetValue(string strName) { if (m_Functions.ContainsKey(strName)) { return(m_Functions[strName]); } if (m_NestedTypes.ContainsKey(strName)) { return(m_NestedTypes[strName]); } ScriptUserdataField field = GetField(strName); if (field != null) { return(Script.CreateObject(field.GetValue(Value))); } Type nestedType = ValueType.GetNestedType(strName, Script.BindingFlag); if (nestedType != null) { ScriptUserdata ret = Script.CreateUserdata(nestedType); m_NestedTypes.Add(strName, ret); return(ret); } throw new ScriptException("Type[" + ValueType.ToString() + "] Variable[" + strName + "] 不存在"); }
public override void SetValue(string strName, ScriptObject value) { ScriptUserdataField field = GetField(strName); if (field == null) { throw new ScriptException("Type[" + ValueType + "] 变量 [" + strName + "] 不存在"); } field.SetValue(Value, Util.ChangeType(value, field.fieldType)); }
private ScriptUserdataField GetField(string strName) { if (m_FieldInfos.ContainsKey(strName)) { return(m_FieldInfos[strName]); } ScriptUserdataField field = new ScriptUserdataField(); field.name = strName; FieldInfo info = ValueType.GetField(strName); if (info != null) { field.field = info; field.fieldType = info.FieldType; m_FieldInfos.Add(strName, field); return(field); } MethodInfo method = ValueType.GetMethod("get_" + strName); if (method != null) { field.getMethod = method; field.fieldType = method.ReturnType; field.setMethod = ValueType.GetMethod("set_" + strName); m_FieldInfos.Add(strName, field); return(field); } method = ValueType.GetMethod("set_" + strName); if (method != null) { field.setMethod = method; field.fieldType = method.GetParameters()[0].ParameterType; field.getMethod = ValueType.GetMethod("get_" + strName); m_FieldInfos.Add(strName, field); return(field); } return(null); }