//方法的完整名,包括方法名+(参数) public static string GetFullName(MethodInfo mi) { string paras = Helper_API_Method_Para.GetParaString(mi); if (paras.Length < 1) { return(string.Format("{0}.{1}", mi.ReflectedType.FullName, mi.Name)); } return(string.Format("{0}.{1}({2})", mi.ReflectedType.FullName, mi.Name, paras)); }
} //参数的摘要 public static Helper_API_Method_Para[] GetParas(MethodInfo method) { ParameterInfo[] paramInfos = method.GetParameters(); Helper_API_Method_Para[] paras = new Helper_API_Method_Para[paramInfos.Length]; for (int i = 0; i < paramInfos.Length; i++) { ParameterInfo pi = paramInfos[i]; paras[i] = new Helper_API_Method_Para(); paras[i].Name = pi.Name; paras[i].Type = pi.ParameterType.FullName; } return(paras); }
public Helper_API_Method[] Methods(string classname) { string assemblyName = "Song.ViewData"; string classFullName = String.Format("{0}.Methods.{1}", assemblyName, classname); Assembly assembly = Assembly.Load(assemblyName); //当前类的反射对象 Type classtype = null; foreach (Type info in assembly.GetExportedTypes()) { if (info.FullName.Equals(classFullName, StringComparison.CurrentCultureIgnoreCase)) { classtype = info; break; } } //注释文档 XmlNodeList nodes = readXml(); //类下面的方法,仅获取当前类生成的方法,不包括父类 List <Helper_API_Method> list = new List <Helper_API_Method>(); MemberInfo[] mis = classtype.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public); foreach (MethodInfo mi in mis) { string fullname = Helper_API_Method.GetFullName(mi); //带参数的方法名称 //方法的注释 XmlNode node = Helper_API_Method.GetNode(mi, nodes); list.Add(new Helper_API_Method() { Name = mi.Name, FullName = fullname, Paras = Helper_API_Method_Para.GetParas(mi, node), Return = Helper_API_Method_Return.GetReturn(mi, node), ClassName = mi.DeclaringType.Name, Class = mi.DeclaringType.FullName, Intro = Helper_API_Method.GetHelp(node, "summary"), Remarks = Helper_API_Method.GetHelp(node, "remarks"), Example = Helper_API_Method.GetHelp(node, "example"), Attrs = Helper_API_Method_Attr.GetAttrs(mi) }); } //按方法名排序 list.Sort((a, b) => a.Name.CompareTo(b.Name)); return(list.ToArray <Helper_API_Method>()); }
public static Helper_API_Method_Para[] GetParas(MethodInfo method, XmlNode node) { Helper_API_Method_Para[] paras = GetParas(method); if (node == null) { return(paras); } for (int i = 0; i < paras.Length; i++) { Helper_API_Method_Para pi = paras[i]; foreach (XmlNode n in node.SelectNodes("param")) { string name = n.Attributes["name"].Value; if (name.Equals(pi.Name, StringComparison.CurrentCultureIgnoreCase)) { pi.Intro = n.InnerText.Trim(); break; } } } return(paras); }
} //参数的摘要 public static Helper_API_Method_Para[] GetParas(MethodInfo method) { ParameterInfo[] paramInfos = method.GetParameters(); Helper_API_Method_Para[] paras = new Helper_API_Method_Para[paramInfos.Length]; for (int i = 0; i < paramInfos.Length; i++) { ParameterInfo pi = paramInfos[i]; paras[i] = new Helper_API_Method_Para(); paras[i].Name = pi.Name; Type nullableType = System.Nullable.GetUnderlyingType(pi.ParameterType); if (nullableType == null) { paras[i].Type = pi.ParameterType.FullName; paras[i].Nullable = false; } else { paras[i].Type = nullableType.FullName + "?"; paras[i].Nullable = true; } } return(paras); }