进入C#也两三个月了
这个问题一直困扰着我
就是反射
反射有什么用?
用在哪里?
用了有什么好处?

解决方案 »

  1.   

     Assembly assembly = Assembly.LoadFrom(Server.MapPath("") + "/Bin/*.dll");
                Type classType = assembly.GetType(className);
                MethodInfo method = classType.GetMethod(methodName);
                object classObject = assembly.CreateInstance(className);
                method.Invoke(classObject, parameters);
      

  2.   

    http://blog.csdn.net/xiaolei1982/archive/2008/04/15/2294364.aspx
      

  3.   

        百度上搜的 - -   创建未知的实例意思是不是这样,比如我现在要获取一个值,但是我不知道这个值是int型还是string型,我用反射去得到我要取的值的类型?
        
        1.使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。 
      2.使用 Module 了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 
      3.使用 ConstructorInfo 了解如下的类似信息:构造函数的名称、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。
      4.使用 Type 的 GetConstructors 或 GetConstructor 方法来调用特定的构造函数。 
      5.使用 MethodInfo 来了解如下的类似信息:方法的名称、返回类型、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法来调用特定的方法。 
      6.使用 FieldInfo 来了解如下的类似信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。 
      7.使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。 
      8.使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。 
      9.使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。 
      

  4.   

    从config文件里面读出内容,实现改一处即可全部改,我的理解哈
      

  5.   

    - -比如数据库里有100条数据
    但是呢 你要生成100个checkbox
    那么可以用反射 根据数据库里有多少数据 生成对应的checkbox = =.曾今做过 
      

  6.   

    百度上搜的 - -  创建未知的实例意思是不是这样,比如我现在要获取一个值,但是我不知道这个值是int型还是string型,我用反射去得到我要取的值的类型? --然后根据你得到的类型,创建一个实例,
    就象
    Program a=new Program();
    但是之前,你根本不知道要创建哪个Program,也就是你只知道“program"的名字一样
    就先得到根据名字得到类型,再创建
      

  7.   

    GC和反射是C#和Java的根本啊
    举个例子,你在设计窗体或者Webform的时候,肯定用到过属性窗口吧,那个窗口里可以编辑控件的属性。你考虑过VS为什么能知道控件有什么属性?每个属性该怎么显示怎么编辑?即使是你自己添加的自定义控件,它也能正确显示和编辑。这就是反射的一个应用。
      

  8.   

    反射就是可以动态的创建一个类对象  例如:在DAL 类库中有一个 BookType 类那么Assembly.Load("DAL").CreateInstance("DAL.BookType");根据类的名称可以创建这个类的对象,不过创建之后是一个object对象 需要强转一下就可以了
      

  9.   

    除了现在在网上常见的c#反射代码,实际你还可以使用ironpython动态即时生成强大的代码并编译执行。换句话说,反射对于经常编写动态程序的人来说,可能过时了,完全不必考虑。
      

  10.   

    另外,在.net4中已经支持dynamic。这可以是在框架内置的,因此所有语言都可以使用。这个新的特性也是为了程序员忘记繁琐的反射,编写出像10几年前的vb一样方便的后期绑定代码而设计的。
      

  11.   

    反射不是动态的创建一个类对象反射只是动态的加载一个类对象动态创建是在 System.Reflection.Emit 命名空间下
      

  12.   

    http://topic.csdn.net/u/20090905/09/adaef103-87f3-4156-8770-08818370e542.html
      

  13.   

    通俗将:
    类不是这样吗:
    Class1 Cl =New Class1();
    但是现在不知道是用Class1 还是用Class2 ?
    所以要用反射来动态加载某个类。(但是你知道那个类是存在的!)