您的位置:首页 > 其它

使用反射技术获取指定类型中方法的完整信息

2010-09-08 12:03 816 查看
反射可以轻松获取指定类型中方法的完整信息,首先获取指定类型的Type对象,然后通过Type对象的GetMethods()方法,获取类型中方法的元数据信息。

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
请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐