Type 为 System.Reflection 功能的根,也是访问元数据的主要方式。 使用 Type 的成员获取关于类型声明的信息,如构造函数、方法、字段、属性 (Property) 和类的事件,以及在其中部署该类的模块和程序集。
Type类的 两种使用方式:
1.Type tp = typeof(Person);
2.Person p=new Person(); Type tp=p.GetType();
Type实例的方法:
GetFields()获得该类下所有公共字段,GetProperties()获得该类下所有公共属性,GetMethods()获得所有公共方法(包括事件和属性隐含的方法),GetMembers()获得所有公共的成员,GetEvents()获得该类下所有的事件 都包含相应的数据类型或返回类型。
Type类的方法:在编写调用插件的程序时,需要做一系列验证。
3个方法
bool tyPer. IsAssignableFrom(Type c):
括号里类型的对象能不能赋值给tyPer的对象;tyPer是不是c的父类
bool tyPer.IsInstanceOfType(object o):
判断对象o是否是当前类tyPer的实例(当前类可以是o的类、父类、接口)
bool IsSubclassOf(Type c):
判断当前类是否是类c的子类。类的事,没有接口的事(接口和类只有实现的关系,没有父子类的关系)。
1个属性
IsAbstract,
判断是否能被实例化,包括抽象类,接口,静态类
Assembly asm = Assembly.LoadFile(@"F:\ClassLibrary2.dll");
Type[] tp1 = asm.GetExportedTypes();//获取此程序集中定义的公共类型(类)
Type[] tp2 = asm.GetTypes();//获取该程序集下所有的类名(不管公有还.Name是私有)//Assembly是抽象类 不能实例化
动态调用成员
方法不能有重载,否则报错
Type typePer=typeof(Person); //获取类型
//表示获取的是无参数的方法
MethodInfo perShow=typePer.GetMethod("Show",System.Type.EmptyTypes);//得到指定公共方法,无参方法(要传System.Type.EmptyTypes空数组)
//获取有参数是字符串的方法,如果想获取后面是int类型的则在tyoe数组中加typeof(int)
MethodInfo perShowString=typePer.GetMethod("Show",newType[]{typeof(string)});//参数是字符串,要加new Type[]{typeof(string)}
Object obj=Activator.CreateInstance(typePer);//创建该类型的对象
perShow.Invoke(obj,null);//无参方法的参数表是对象obj和null;静态方法obj写为null
perShowString.Invoke(obj,newObject[]{"你猜调到了吗"});//有参方法的参数表是对象obj和参数类型常量一个
objecto1=perShowString.Invoke(obj,newObject[]{"你猜调到了吗"});//获取方法的返回值
Console.WriteLine(perShowString);//方法名(包含返回类型)