从invoke简单理解反射

时间:2024-01-05 10:23:56

前言 程序集   :

程序集是.NET应用程序的基本单位,包含了程序的资源、类型元数据和MSIL代码。根据程序集生成方式的不同,可分为静态程序集和动态程序集。程序集又可分为单文件程序集和多文件程序集,多文件程序集将程序集中的文件按类型组织到多个文件中。每个程序集,无论是静态的还是动态的,均包含描述该程序集中各元素彼此如何关联的数据集合,程序集清单就包含这些程序集元数据。程序集还可以进行版本控制和强名称等安全设置。

反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。

2.1.1  模块的操作

程序集由模块组成,每个程序集可以包含至少一个模块。每一个模块就是一个标准的PE文件(见第1章)。接下来,我们学习使用编译器来进行模块的生成、设置等基本操作。

invoke 就是根据反射原理,调用方法:

System.Web.UI.Page p = this.Page;(获取this.Page)

Type pageType = p.GetType();(反射原理获取Type 类型)

MethodInfo mi = pageType.GetMethod("BindAdsToPageByLocator");(反射原理根据方法名“BindAdsToPageByLocator”找到这个方法)

DataTable dt = (DataTable)mi.Invoke(p, new object[] { 0, 0, code});   (“0, 0, code”为方法“BindAdsToPageByLocator”所需的参数,返回datatable类型)