使用反射技术获取指定类型中方法的完整信息
2010-09-08 12:03
816 查看
反射可以轻松获取指定类型中方法的完整信息,首先获取指定类型的Type对象,然后通过Type对象的GetMethods()方法,获取类型中方法的元数据信息。
输出方法及方法的基本属性和参数信息,结果如下:
=============ClassA类所含的方法============
方法名:MethodB
方法所属类名:MethodRef.ClassA
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:False
方法返回类型为:System.Void
参数i
参数类型:System.Int32 参数位置0
参数j
参数类型:System.String 参数位置1
方法名:ToString
方法所属类名:MethodRef.ClassA
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:True
方法返回类型为:System.String
方法名:Equals
方法所属类名:System.Object
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:True
方法返回类型为:System.Boolean
参数obj
参数类型:System.Object 参数位置0
方法名:GetHashCode
方法所属类名:System.Object
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:True
方法返回类型为:System.Int32
方法名:GetType
方法所属类名:System.Object
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:False
方法返回类型为:System.Type
请按任意键继续. . .
using System; using System.Collections.Generic; using System.Linq; using System.Text; //导入相应命名空间 using System.Reflection; namespace MethodRef { class ClassA { string _name; internal string MethodA(string s) { _name = s; return _name; } public void MethodB(int i, string j) { Console.WriteLine("MethodB方法已调用,所传递参数为{0},{1}", i, j); } public override string ToString() { return "ClassA类的对象"; } } public class MethodRef { static void Main(string[] args) { try { //如果有命名空间,则需要指定,否则返回为null Type tp = System.Type.GetType("MethodRef.ClassA", false, false); //利用Type对象的GetMethods()方法,返回对象中所有公共方法数组 MethodInfo[] ma = tp.GetMethods(); Console.WriteLine("/n/t=============ClassA类所含的方法============"); foreach (MethodInfo s in ma) { Console.WriteLine("/n方法名:{0}", s.Name); Console.WriteLine("方法所属类名:{0}", s.DeclaringType); Console.WriteLine("方法是否为构造函数:{0}", s.IsConstructor); Console.WriteLine("方法是否为Public:{0}", s.IsPublic); Console.WriteLine("方法是否为internal:{0}", s.IsAssembly); Console.WriteLine("方法是否为protected成员:{0}", s.IsFamily); Console.WriteLine("方法是否为private成员:{0}", s.IsPrivate); Console.WriteLine("方法是否为泛型方法:{0}", s.IsGenericMethod); Console.WriteLine("方法是否为静态方法:{0}", s.IsStatic); Console.WriteLine("方法是否为虚方法:{0}", s.IsVirtual); Console.WriteLine("方法返回类型为:{0}", s.ReturnType); //调用s的GetParameters()方法,返回ParameterInfo类型数组,遍历数组输出参数信息 foreach (ParameterInfo pm in s.GetParameters()) { Console.WriteLine("/n/t参数{0}", pm.Name); Console.Write("参数类型:{0}", pm.ParameterType); Console.WriteLine("/t参数位置{0}", pm.Position); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } }
输出方法及方法的基本属性和参数信息,结果如下:
=============ClassA类所含的方法============
方法名:MethodB
方法所属类名:MethodRef.ClassA
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:False
方法返回类型为:System.Void
参数i
参数类型:System.Int32 参数位置0
参数j
参数类型:System.String 参数位置1
方法名:ToString
方法所属类名:MethodRef.ClassA
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:True
方法返回类型为:System.String
方法名:Equals
方法所属类名:System.Object
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:True
方法返回类型为:System.Boolean
参数obj
参数类型:System.Object 参数位置0
方法名:GetHashCode
方法所属类名:System.Object
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:True
方法返回类型为:System.Int32
方法名:GetType
方法所属类名:System.Object
方法是否为构造函数:False
方法是否为Public:True
方法是否为internal:False
方法是否为protected成员:False
方法是否为private成员:False
方法是否为泛型方法:False
方法是否为静态方法:False
方法是否为虚方法:False
方法返回类型为:System.Type
请按任意键继续. . .
相关文章推荐
- 利用反射技术获取当前程序集指定类型的信息
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- 【反射】使用反射来获取注解原数据信息-类信息-方法信息等
- [原创]让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- 反射技术获取到对象中的指定方法
- [原创]让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- 如何使用反射技术获取泛型类的真实类型?
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- 如何使用反射技术获取泛型类的真实类型?
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型
- 使用C#反射中的MakeGenericType函数,来为泛型方法和泛型类指定(泛型的)类型
- 使用C#反射中的MakeGenericType函数,来为泛型方法和泛型类指定(泛型的)类型
- 使用反射技术列举类型信息!
- 动态加载外部程序集并用反射获取指定类型的信息
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- JS使用ajax方法获取指定url的head信息中指定字段值的方法
- 让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .
- java基础-反射2(反射,反射操作对象,Class对象的使用,类型信息的获取)
- 黑马程序员——通过反射获取方法中泛型参数的指定类型