protected static string GetMethodName(string dotName, System.Reflection.MethodInfo method, Type methodAtType, Dictionary <string, object> staticusenames, Dictionary <string, object> usenames) { if (method.IsSpecialName && method.Name.StartsWith("add_") && method.GetParameters().Length == 1 && IsDelegate(method.GetParameters()[0].ParameterType)) { string eventname = method.Name.Substring(4); return(eventname + "_addEventListener"); } else if (method.IsSpecialName && method.Name.StartsWith("remove_") && method.GetParameters().Length == 1 && IsDelegate(method.GetParameters()[0].ParameterType)) { string eventname = method.Name.Substring(7); return(eventname + "_removeEventListener"); } var members = methodAtType.GetMember(dotName); //***加上受保护的方法*** var pmem = methodAtType.GetMember(dotName, BindingFlags.Instance | BindingFlags.NonPublic); List <MemberInfo> _tempmembers = new List <MemberInfo>(); _tempmembers.AddRange(members); foreach (var item in pmem) { if (item is FieldInfo) { if (((FieldInfo)item).IsFamily) { if (IsSkipMember(item)) { continue; } if (IsSkipType(((FieldInfo)item).FieldType)) { continue; } _tempmembers.Add(item); } } else if (item is MethodInfo) { if (((MethodInfo)item).IsFamily) { if (IsSkipMember(item)) { continue; } if (InterfaceCreator.isMethodSkip((MethodInfo)item)) { continue; } _tempmembers.Add(item); } } } members = _tempmembers.ToArray(); //var props = methodAtType.GetProperties(); //bool isprop = false; //foreach (var item in props) //{ // if (Equals(method, item.GetGetMethod())) // { // isprop = true; // } // if (Equals(method, item.GetSetMethod())) // { // isprop = true; // } //} //if (!isprop) { if (Char.IsLower(dotName[0])) { List <System.Reflection.MemberInfo> temp = new List <System.Reflection.MemberInfo>(); var ms = methodAtType.GetMember(Char.ToUpper(dotName[0]) + dotName.Substring(1)); foreach (var item in ms) { if (item.MemberType != MemberTypes.NestedType) { temp.Add(item); } } if (temp.Count > 0) { dotName = dotName + "".PadLeft(temp.Count, '_'); } } } if (methodAtType.IsInterface) { var extinterface = methodAtType.GetInterfaces(); List <System.Reflection.MemberInfo> inheritmember = new List <System.Reflection.MemberInfo>(); foreach (var item in extinterface) { inheritmember.AddRange(item.GetMember(dotName)); } if (inheritmember.Count > 0) { inheritmember.AddRange(members); members = inheritmember.ToArray(); } } else { var basetype = methodAtType.BaseType; List <System.Reflection.MemberInfo> inheritmember = new List <System.Reflection.MemberInfo>(); if (basetype != null) { var inherit = basetype.GetMember(dotName); inheritmember.AddRange(inherit); //***继承的受保护的对象*** var pinherit = basetype.GetMember(dotName, BindingFlags.Instance | BindingFlags.NonPublic); foreach (var item in pinherit) { if (item is FieldInfo) { if (((FieldInfo)item).IsFamily) { if (IsSkipMember(item)) { continue; } if (IsSkipType(((FieldInfo)item).FieldType)) { continue; } inheritmember.Add(item); } } else if (item is MethodInfo) { if (((MethodInfo)item).IsFamily) { if (IsSkipMember(item)) { continue; } if (InterfaceCreator.isMethodSkip((MethodInfo)item)) { continue; } inheritmember.Add(item); } } } //*********************** basetype = basetype.BaseType; } if (inheritmember.Count > 0) { inheritmember.AddRange(members); members = inheritmember.ToArray(); } } string ext = string.Empty; for (int i = 0; i < members.Length; i++) { var m = members[i]; if (IsSkipMember(m)) { continue; } if (m is MethodBase) { if (((MethodBase)m).IsStatic != method.IsStatic) { continue; } } else if (m is PropertyInfo) { PropertyInfo p = (PropertyInfo)m; if (Equals(p.GetGetMethod(), method)) { break; } if (Equals(p.GetSetMethod(), method)) { break; } } if (members[i].Equals(method)) { break; } else { ext = ext + "_"; } } string v = dotName.Substring(0, 1).ToLower() + dotName.Substring(1) + ext; if (dotName.Length > 1) { if (Char.IsUpper(dotName.Substring(1, 1)[0])) { v = dotName + ext; } } while (as3keywords.ContainsKey(v)) { v = v + "_"; } if (method.IsStatic) { if (staticusenames != null) { while (staticusenames.ContainsKey(v)) { v = v + "_"; } } } else { if (usenames != null) { while (usenames.ContainsKey(v)) { v = v + "_"; } } } return(v); }