日期:2014-05-18  浏览次数:20872 次

请教C#中的反射
从C++转C#两个月,还是不太了解反射。看书,里面说的主要是Type拿到后能取各种属性,但是不太明白这种属性有什么作用。纯判断类型的话,is就可以。as可以映射类型。实在还是没有弄明白反射的作用。
搜论坛上的帖子,很多是说Java的。因此发帖请教几个问题。

1、反射的定义。msdn上说反射提供了一种对象。 哪位有没有更具体的解释呢。(Reflection provides objects (of type Type) that encapsulate assemblies, modules and types.)
2、反射的使用范围,哪些场景会使用反射,甚至哪些场景必须使用反射。因为我现在看到的就是Type,好像没有太广的使用范围。
3、反射的优缺点。

谢谢。

------解决方案--------------------
http://www.cnblogs.com/zhusl118/archive/2008/11/21/1338373.html
------解决方案--------------------
反射实际上就是得到程序集中的属性和方法.
实现步骤:
1,导入using System.Reflection;
2,Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
3, foreach (Type type in assembly.GetTypes())
{
string t = type.Name;
}
得到程序集中所有类的名称
4,Type type = assembly.GetType("程序集.类名");获取当前类的类型
5,Activator.CreateInstance(type); 创建此类型实例
6,MethodInfo mInfo = type.GetMethod("方法名");获取当前方法
7,mInfo.Invoke(null,方法参数);
------解决方案--------------------
能不用反射就别用反射,如果你的结构定义的足够好,那么根本就不需要反射。
------解决方案--------------------
架构师要用到反射,因为他们需要调用一些下面程序员还没有处出来的类的功能.不用反射你咋搞?...当然,你可以都把接口写出来也行,但是毕竟还是反射灵活些....