// // arg: a,b,c // public static string BuildCallString(Type classType, MemberInfo memberInfo, string argList, MemberFeature features, string newValue = "") { bool bGenericT = classType.IsGenericTypeDefinition; string memberName = memberInfo.Name; bool bIndexer = ((features & MemberFeature.Indexer) > 0); bool bStatic = ((features & MemberFeature.Static) > 0); bool bStruct = classType.IsValueType; string typeFullName = JSNameMgr.GetTypeFullName(classType); bool bField = (memberInfo is FieldInfo); bool bProperty = (memberInfo is PropertyInfo); bool bGet = ((features & MemberFeature.Get) > 0); bool bSet = ((features & MemberFeature.Set) > 0); if ((bGet && bSet) || (!bGet && !bSet)) { return ">>>> sorry >>>>"; } StringBuilder sb = new StringBuilder(); if (bField || bProperty) { if (!bGenericT) { var strThis = typeFullName; if (!bStatic) { strThis = "_this"; sb.AppendFormat(" {0} _this = ({0})vc.csObj;\n", typeFullName); } var result = string.Empty; if (bGet) { // Լ�������صĽ���� result result = "var result = "; } if (bIndexer) sb.AppendFormat(" {2}{0}[{1}]", strThis, argList, result); else sb.AppendFormat(" {2}{0}.{1}", strThis, memberName, result); if (bGet) { sb.Append(";\n"); } else { sb.AppendFormat(" = {0};\n", newValue); if (!bStatic && bStruct) { sb.Append(" JSMgr.changeJSObj(vc.jsObjID, _this);\n"); } } } else { // Լ���������Ǹ��ý� member if (bIndexer || !bIndexer) // 2��һ�� { if (bProperty) { sb.AppendFormat(" {4}member.{0}({1}, {2}new object[][[{3}]]);\n", bGet ? "GetValue" : "SetValue", bStatic ? "null" : "vc.csObj", bSet ? newValue + ", " : "", argList, bGet ? "var result = " : ""); } else { sb.AppendFormat(" {3}member.{0}({1}{2});\n", bGet ? "GetValue" : "SetValue", bStatic ? "null" : "vc.csObj", bSet ? ", " + newValue : "", bGet ? "var result = " : ""); } } } } return sb.ToString(); }
// // arg: a,b,c // public static string BuildCallString(Type classType, MemberInfo memberInfo, string argList, MemberFeature features, string newValue = "") { bool bGenericT = classType.IsGenericTypeDefinition; string memberName = memberInfo.Name; bool bIndexer = (features & MemberFeature.Indexer) > 0; bool bStatic = (features & MemberFeature.Static) > 0; bool bStruct = classType.IsValueType; string typeFullName = JSNameMgr.GetTypeFullName(classType); bool bField = memberInfo is FieldInfo; bool bProperty = memberInfo is PropertyInfo; bool bGet = (features & MemberFeature.Get) > 0; bool bSet = (features & MemberFeature.Set) > 0; if ((bGet && bSet) || (!bGet && !bSet)) { return(">>>> sorry >>>>"); } var sb = new StringBuilder(); if (bField || bProperty) { if (!bGenericT) { string strThis = typeFullName; if (!bStatic) { strThis = "_this"; sb.AppendFormat(" {0} _this = ({0})vc.csObj;\n", typeFullName); } string result = string.Empty; if (bGet) { // convention: name 'result' result = "var result = "; } if (bIndexer) { sb.AppendFormat(" {2}{0}[{1}]", strThis, argList, result); } else { sb.AppendFormat(" {2}{0}.{1}", strThis, memberName, result); } if (bGet) { sb.Append(";\n"); } else { sb.AppendFormat(" = {0};\n", newValue); if (!bStatic && bStruct) { sb.Append(" JSMgr.changeJSObj(vc.jsObjID, _this);\n"); } } } else { // convention: name 'member' if (bIndexer || !bIndexer) // both indexer and not indexer enters { if (bProperty) { sb.AppendFormat(" {4}member.{0}({1}, {2}new object[][[{3}]]);\n", bGet ? "GetValue" : "SetValue", bStatic ? "null" : "vc.csObj", bSet ? newValue + ", " : "", argList, bGet ? "var result = " : ""); } else { sb.AppendFormat(" {3}member.{0}({1}{2});\n", bGet ? "GetValue" : "SetValue", bStatic ? "null" : "vc.csObj", bSet ? ", " + newValue : "", bGet ? "var result = " : ""); } } } } return(sb.ToString()); }
// // arg: a,b,c // public static TextFile BuildCallString(Type classType, MemberInfo memberInfo, string argList, MemberFeature features, object newValue = null /* string 或 TextFile */) { bool bGenericT = classType.IsGenericTypeDefinition; string memberName = memberInfo.Name; bool bIndexer = ((features & MemberFeature.Indexer) > 0); bool bStatic = ((features & MemberFeature.Static) > 0); bool bStruct = classType.IsValueType; string typeFullName = JSNameMgr.CsFullName(classType); bool bField = (memberInfo is FieldInfo); bool bProperty = (memberInfo is PropertyInfo); bool bGet = ((features & MemberFeature.Get) > 0); bool bSet = ((features & MemberFeature.Set) > 0); if ((bGet && bSet) || (!bGet && !bSet)) { return(null); } TextFile tf = new TextFile(); if (bField || bProperty) { if (!bGenericT) { var strThis = typeFullName; if (!bStatic) { strThis = "_this"; tf.Add("{0} _this = ({0})vc.csObj;", typeFullName); } string access = bIndexer ? string.Format("{0}[{1}]", strThis, argList) : string.Format("{0}.{1}", strThis, memberName); if (bGet) { tf.Add("var result = {0};", access); } else { if (newValue is string) { tf.Add("{0} = {1};", access, newValue); } else { tf.Add("{0} = ", access).In().Add((newValue as TextFile).Ch).Out().Add(";"); } if (!bStatic && bStruct) { tf.Add("JSMgr.changeJSObj(vc.jsObjID, _this);"); } } } else { // convention: name 'member' if (bIndexer || !bIndexer) // both indexer and not indexer enters { string objs = (bStatic ? "null" : "vc.csObj"); if (bProperty) { if (bGet) { tf.Add("var result = member.GetValue({0}, new object[]{{{1}}});", objs, argList); } else { if (newValue is string) { tf.Add("member.SetValue({0}, {1}, new object[]{{{2}}});", objs, newValue, argList); } else { tf.Add("member.SetValue({0}, ", objs) .In() .Add((newValue as TextFile).Ch) .Out() .Add(", new object[]{{{0}}});", argList); } } //tf.Add("{4}member.{0}({1}, {2}new object[]{{{3}}});", // bGet ? "GetValue" : "SetValue", // bStatic ? "null" : "vc.csObj", // bSet ? newValue + ", " : "", // argList, // bGet ? "var result = " : ""); } else { if (bGet) { tf.Add("var result = member.GetValue({0});", objs); } else { if (newValue is string) { tf.Add("member.SetValue({0}, {1});", objs, newValue); } else { tf.Add("member.SetValue({0}, ", objs).In().Add((newValue as TextFile).Ch).Out().Add(");"); } } //tf.Add("{3}member.{0}({1}{2});", // bGet ? "GetValue" : "SetValue", // bStatic ? "null" : "vc.csObj", // bSet ? ", " + newValue : "", // bGet ? "var result = " : ""); } } } } return(tf); }