从C++转C#两个月,还是不太了解反射。看书,里面说的主要是Type拿到后能取各种属性,但是不太明白这种属性有什么作用。纯判断类型的话,is就可以。as可以映射类型。实在还是没有弄明白反射的作用。
搜论坛上的帖子,很多是说Java的。因此发帖请教几个问题。1、反射的定义。msdn上说反射提供了一种对象。 哪位有没有更具体的解释呢。(Reflection provides objects (of type Type) that encapsulate assemblies, modules and types.)
2、反射的使用范围,哪些场景会使用反射,甚至哪些场景必须使用反射。因为我现在看到的就是Type,好像没有太广的使用范围。
3、反射的优缺点。谢谢。

解决方案 »

  1.   

    http://www.cnblogs.com/zhusl118/archive/2008/11/21/1338373.html
      

  2.   

    反射实际上就是得到程序集中的属性和方法.
    实现步骤:
    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,方法参数);
      

  3.   


    MFC应该有反射,但没有用过MFC。标准C++没有反射的。
      

  4.   

    举个简单的例子,有一个int变量i,有系列的方法Method1、Method2,当i==1时候调Method1,i==2的时候调Method2,一般情况可以用switch来解决这个问题,但有没有想过把字符串"Method"和i拼接起来直接调用而省掉swtich呢?那就用反射吧。int i = 1;
    string methodName = "Method" + i;
    this.GetType().GetMethod(methodName).Invoke(this, null);以上代码仅供参考