public static void BuildConstructors(TextFile tfInst, Type type, List <MemberInfoEx> constructors, int slot) { var argActual = new args(); var argFormal = new args(); for (int i = 0; i < constructors.Count; i++) { MemberInfoEx infoEx = constructors[i]; if (infoEx.Ignored) { continue; } ConstructorInfo con = infoEx.member as ConstructorInfo; TextFile tf = new TextFile(); ParameterInfo[] ps = con == null ? new ParameterInfo[0] : con.GetParameters(); argActual.Clear().Add( (int)JSVCall.Oper.CONSTRUCTOR, // OP slot, i, // NOTICE "true", // IsStatics "this" ); argFormal.Clear(); // add T to formal param Type[] GAs = null; if (type.IsGenericTypeDefinition) { GAs = type.GetGenericArguments(); for (int j = 0; j < GAs.Length; j++) { //argFormal.Add("t" + j + ""); argActual.AddFormat("${0}", GAs[j].Name); } } //StringBuilder sbFormalParam = new StringBuilder(); //StringBuilder sbActualParam = new StringBuilder(); for (int j = 0; j < ps.Length; j++) { argFormal.Add("a" + j.ToString()); argActual.Add("a" + j.ToString()); } string mName = Ctor_Name(infoEx.GetOverloadIndex()); // 特殊处理 - MonoBehaviour 不需要构造函数内容 if (type == typeof(MonoBehaviour)) { tf.Add("{0}: function ({1}) {{}},", mName, argFormal); } // 再次特殊处理 else if (type == typeof(WaitForSeconds)) { tf.Add("{0}: function ({1}) {{", mName, argFormal) .In() .Add("this.$totalTime = a0;") .Add("this.$elapsedTime = 0;") .Add("this.$finished = false;") .Out().Add("},"); } else { TextFile tfFun = tf.Add("{0}: function ({1}) {{", mName, argFormal) .In(); if (type.IsGenericTypeDefinition) { tfFun.Add("var $GAs = Bridge.Reflection.getGenericArguments(Bridge.getType(this));"); for (int j = 0; j < GAs.Length; j++) { tfFun.Add("var ${0} = Bridge.Reflection.getTypeFullName($GAs[{1}]);", GAs[j].Name, j); } } tfFun.Add("CS.Call({0});", argActual) .Out().Add("},"); } tfInst.Add(tf.Ch); } }