1.通过Assembly、MemberInfo、MethodBody 和LocalVariableInfo类型和程序集属性使用类型元数据
2.通过生成器类和绑定类型动态地使用程序集
1.反射
1>反射是在运行时检查程序集清单中的元数据的功能。
2>程序集的元数据提供程序集和程序集中所有类型(包括泛型类型)的相关信息。
3>程序集由模块组成,模块由类型组成,而类型包含成员。
4>.NET Framework 提供了System.Type类并在System.Reflection命名空间中提供了很多类,这些类可用于执行反射。
2.使用 Assembly 类访问类型元数据
GetAssembly:此方法返回定义了指定类的程序集。
GetCallingAssembly:此方法返回调用当前正在执行的方法的方法的程序集。
GetEntryAssembly:此方法返回在默认应用程序域中的进程可执行文件。在其他应用程序域中,这是由AppDomain.ExecuteAssembly执行的第一个进程可执行文件。
GetExecutingAssembly:此方法返回包含当前正在执行的代码的程序集。
Load:此方法加载并解析程序集中的依赖项。依赖程序集必须位于应用程序的根目录、private /bin 路径或全局程序集缓存中。
LoadFile:此方法加载为其指定了文件名或路径的程序集文件的内容。与Load方法不同,LoadFile方法不解析程序集中的依赖项,因此需要在使用此方法时预先加载所有依赖程序集。
LoadFrom:在给定程序集的文件名或路径的情况下,此方法加载程序集文件的内容。程序集的路径是基于当前目录的相对路径,而程序集会被加载到调用方的域中。
LoadModule:此方法加载程序集的内部模块。
3.使用MemberInfo类研究类型元数据
DeclaringType:此属性检索声明成员的类的名称。
MemberType:该属性检索方法、构造函数、模块或字段等成员类型。
MetadataToken:与Module方法一同使用时,此属性返回一个惟一标识元数据元素的值。
Module:此属性返回在其中定义了成员的模块。
Name:此属性检索当前成员的名称。
ReflectedType:此属性检索用于获取MemberInfo类的实例的对象类型。
GetCustomAttributes:此属性返回应用于成员的所有属性。所有派生类都必须重写此方法。
GetType:此方法继承自System.Object,返回当前实例的System.Type。
IsDefined:此方法指示某个特定属性是否应用于某成员。所有派生类都必须重写此方法。如果
NET Framework 提供了几个类,可以使用它们来访问元数据成员的信息 。
(1)Type类及其子类
1>EnumBuilder:描述并表示一个枚举。
2>GenericTypeParameterBuilder:定义和创建动态定义的泛型类型的泛型参数。
3>TypeBuilder:在运行时定义并创建类的新实例。
4>TypeDelegator:包装一个类型对象并将所有方法委托给类型。
(2) MethodBase类
attributeType的一个或多个实例应用于某成员,则此方法返回 true;否则将返回false。
Attributes:此属性返回与方法关联的属性。
DeclaringType:此属性返回声明成员的类。
IsConstructor:此方法指示方法是否为构造函数。
IsPrivate:此属性指示方法是否为私有。
IsPublic:此属性指示方法是否为公共。
IsVirtual:此属性指示方法是否为虚拟。
GetParameters:此方法返回方法的参数。
(3) EventInfo类
Attributes:此属性(property)返回事件的属性(attribute)。
IsMultiCast:此属性返回一个Boolean值,它指示此事件是否可保持一个以上的事件处理方法的引用。
IsSpecialName:此属性指示此事件名称是否具有特殊意义。以下划线(_)开头或包含下划线的名称、以及属性访问器和运算符重载方法的名称需要一些编译器的特殊处理。
Name:此属性返回事件的名称。
(4) FieldInfo类
FieldType:此属性返回字段的类型。
IsInitOnly:此属性返回一个Boolean值,它指示此字段是否只能在构造函数的主体中设置。
IsLiteral:该属性返回一个Boolean 值,此值指示字段是否为常数。
IsSpecialName:该属性返回一个Boolean 值,此值指示字段是否具有SpecialName属性。
IsStatic:该属性返回一个Boolean 值,此值指示字段是否为静态成员。
(5) PropertyInfo类
Attributes:此属性(property)获取某一属性(property)的属性(attribute)。
CanRead:此属性获取一个 Boolean 值,此值指示属性是否可读。
CanWrite:此属性获取一个 Boolean 值,此值指示是否可写入属性。
Name:此属性获取属性名。
PropertyType:此属性获取属性的类型。
4.使用MethodBody类检查方法的内容
ExceptionHandlingClauses:此属性返回方法内的异常处理从句。
InitLocals:此属性返回一个Boolean值,它指示方法主体中的局部变量是否已初始化为其对应类型的默认值。
LocalSignatureMetadataToken:此属性返回签名的一个元数据标记,该签名使用元数据描述方法中的局部变量。
LocalVariables:此属性返回方法主体中所声明的局部变量的列表。
MaxStackSize:此属性返回方法执行时操作数堆栈上的最大项数。
GetILAsByteArray:此方法将方法主体的MSIL代码作为字节数组返回。
LocalVariables的成员:
IsPinned:此属性返回一个Boolean 值,此值指示此变量是否固定在内存中。如果对象是固定的,则不能通过垃圾回收将其移动。
LocalIndex:此属性返回方法主体内局部变量的索引。
LocalType:此属性返回局部变量的类型。