最近在学习反射,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类中的方法。