反射
反射是一种计算机方式。是程序可以访问、检测和修改它本身状态行为的一种能力。
程序集包括模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
1.使用Assembly定义和加载程序集,加载在程序清单中列出的模块,以及从此程序集中查询类型并创建该类型的实例。
2.使用Module了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上课定义的多有全局方法或其他特定的非全局方法 。
3.使用ConstructorInfo了解如下的类似信息:构造函数的名称、参数、访问修饰符(如public或private)和实现详细信息(abstract或virtual)等。
4.使用Type的GetGonstructor方法来调用特定的构造函数。
5.使用MethodInof来了解如下的类似信息:方法名称、返回值类型、参数、访问修饰符(如public或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。
6.使用FieldInfo来了解如下的类似信息:字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等:并获取或设置字段值。
7.使用EventInfo聊了解如下的信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等:并添加或移除事件处理程序。
8.使用ProPertyInfo来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等:并获取或设置属性值。
9.使用ParameterInfo来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等 。
优点:
1.反射提高了程序的灵活性和扩展性。
2.降低耦合性,提高了自适应能力。
3.它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
缺点:
1.性能问题:使用发射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此发射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。
2.使用反射会模糊程序内部逻辑:程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码会更复杂。