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

c#反射的作用
我看了些反射的资料 有些不懂 反射是动态获取程序集中的对象 属性 方法 然后去调用 但是如果有了程序集 为什么不直接调用 而是用发射去调用呢

------解决方案--------------------
做二次开发支持,提供接口的情况下用反射。
比如你要求对方实现某个方法,先LoadAssembly,然后GetTypes,每个类型中GetMethod找合适的名字,找到就调用,可以扩展现有系统。还有很多需要用的地方,比如使用某个类,想清除所有注册的事件,你就要反射。
------解决方案--------------------
反射是事先不知道的情况下,动态调用的,比方说你定义了一个接口IUser,A用户定义了一个类clsUserA继承你的接口,B用户也定一个了一个类clsUserB,继承你的接口

你在A、B定义类之前要实现代码,这时候还没有clsUserA和clsUserB等类,怎么办呢,只能用反射了,让AB把他们类做成dll,你动态记载这个dll,然后反射这个dll的类,利用你的接口来调用A、B定义类的实现方法。
------解决方案--------------------
来学习了,对于反射还只是处于知道的阶段...
------解决方案--------------------
自己看MSDN...
引用 MSDN:
反射通常具有以下用途:

使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。

使用 Module 发现以下信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。

使用 ConstructorInfo 发现以下信息:构造函数的名称、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetConstructors 或 GetConstructor 方法来调用特定的构造函数。

使用 MethodInfo 发现以下信息:方法的名称、返回类型、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法来调用特定的方法。

使用 FieldInfo 发现以下信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。

使用 EventInfo 发现以下信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。

使用 PropertyInfo 发现以下信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。

使用 ParameterInfo 发现以下信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。

当您在一个应用程序域的仅反射上下文中工作时,请使用 CustomAttributeData 来了解有关自定义属性的信息。使用 CustomAttributeData,您不必创建属性的实例就可以检查它们。

System.Reflection.Emit 命名空间的类提供了一种特殊形式的反射,使您能够在运行时生成类型。

反射也可用于创建称作类型浏览器的应用程序,它使用户能够选择类型,然后查看有关选定类型的信息。

反射还有其他一些用途。JScript 等语言编译器使用反射来构造符号表。System.Runtime.Serialization 命名空间中的类使用反射来访问数据并确定要持久保存的字段。System.Runtime.Remoting 命名空间中的类通过序列化来间接地使用反射。