C# 中的反射和Assembly程序集
一、反射
1、程序是用来处理数据的,文本和特性都是数据,而我们的程序本身(类中的定义和 BLC中的类)这些也都是数据
2、有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中 Assmbly
3、程序在运行时,可以查看其它程序集或者其本身的元数据。一个运行的程序查看本身的元数据或者其它程序集中的元数据的行为叫做反射
使用Type类 可以反射数据,使用特性可以给类型添加元数据。 Type类位于System.Reflection命名空间下
Type的对象 就是用来存储一个类里面包含什么东西,方法啊 字段啊 属性啊 命名空间、等等
Type类是抽象类 所以不能利用它去实例化对象。
关于Type类的重要事项:
1、对于程序中用到的每一个类型,CLR都会创建一个包含这个类型信息的Type类型的对象。
2、通过某个类的实例对象.GetType() 就可以获取上述的对象 另一种是 Type type = typeof(类名)
MyClass my = new MyClass(); Type type = my.GetType();
3、程序中用到的每一个类型都会关联到一个独立Type类型的对象
4、不管创建多少个同类型的实例,只有一个Type对象会关联这些实例
type对象有很多属性和方法 都是用来反射操作用的。 如获取类名 获取类定义的字段 type.Name 、 type.NameSpace 、type.Assembly(程序集)
5、Type的对象 只存储类的成员 不存储具体的值
二、Assembly
1、获取程序集:
MyClass my = new MyClass();
Assebly assem = my.GetType().Assembly;
这个程序集里包含了 该程序集里的所有类名 (很像浏览器window对象 window["className"] )
Type[] types = assem.GetTypes(); 里面就有所有类名