Reflector(反射):Type类

1、  通过反射的GetProperties()方法只能获取一个对象中被标记为Public的属性。

例如:有一个Person类:

 

1 class Person
2
3 {
4
5 protected string name{get;set;}
6
7 public int age {get;set;}
8
9 }
10
11  

 

 

通过Type动态获取person的属性:

 

Type t=typeof(Person);

foreach (PropertyInfo pro in t.GetProperties())

{

Console.WriteLine(pro);

}

 

 

输出:  2010082422354716.gif 

若将person类中name属性的public去掉或者改成其他的将不能通过Type来动态获取。

通过Type动态获取person的方法:

 

foreach (MethodInfo method in t.GetMethods())

{

Console.WriteLine(method);

}

 

 

输出: 2010082422362684.gif

获取的方法中还包括父类的。同时,在这还可以看出,一个类中的属性也是方法,对应着一个get和set方法。

 

通过Assembly的GetExportedTypes()方法可以获得一个assembly中的所有public类型。Activator.CreateInstance()动态创建对象,MethodInfo类的Invoke方法来动态调用方法。

代码:

 

ContractedBlock.gifExpandedBlockStart.gif代码
Assembly asm = Assembly.LoadFile(@"I:\Execise\20100821\接口入门\MyClass\bin\Debug\MyClass.dll"); //获得指定路径下的assembly

foreach (Type type in asm.GetExportedTypes()) //通过GetExportedTypes()获得assembly中D的所有public类型¨

{

object obj = Activator.CreateInstance(type);// 调用Activator.CreateInstance方法动态创建对象

MethodInfo methodSayHello
= type.GetMethod("SayHello");//获得SqyHello方法 if (methodSayHello !=null)

{

methodSayHello.Invoke(obj,
null); //动态来调用指定对象下的方法.obj obj为对象,null代表ª在这SayHello方法中不需传参数

}



}


 

转载于:https://www.cnblogs.com/zhlnxindie/archive/2010/08/24/1807665.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值