反射

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是抽象类 不能实例化

Activator.CreateInstance(Type t)会动态调用类的无参构造函数创建一个对象,返回值就是创建的对象,如果类没有无参构造函数就会报错。

动态调用成员

方法不能有重载,否则报错

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);//方法名(包含返回类型)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值