c#用反射获取类中的方法

144 阅读1分钟

最近在学习反射,c#可以通过反射的方式获取类中的方法成员,反射有如下优缺点:
优点:
1、反射提高了程序的灵活性和扩展性。
2、降低耦合性,提高自适应能力。
3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
缺点:
1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

下面是一个小例子
定义一个类,包含两个方法:

class MyClass
{
public int Add(int a,int b)
{
return a + b;
}
public int Minus(int a,int b)
{
return a - b;
}
}
然后在主函数中通过反射获取类中的方法

    Type finfo = typeof(MyClass);
    foreach(MethodInfo m in finfo.GetMethods())
    {
        Console.WriteLine("Method:{0}",m.Name);
    }
    Console.ReadKey();

运行结果:
在这里插入图片描述
可以看到,虽然我定义的类里面只有Add()和Minus()两个方法,但是通过反射得到的方法却多了ToString(),Equals(),GetHashCode()和GetType()这4个方法,因为这几个方法都是基类Object类中的方法。