现在的位置: 首页 > 综合 > 正文

Reflector(反射):Type类

2012年01月14日 ⁄ 综合 ⁄ 共 997字 ⁄ 字号 评论关闭
1、  通过反射的GetProperties()方法只能获取一个对象中被标记为Public的属性。

例如:有一个Person类:

 

class Person
{ 
 protected string name{get;set;} 
 public  int age {get;set;} 
} 

 

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

 

Type t=typeof(Person);
foreach (PropertyInfo pro in  t.GetProperties())           
{              
 Console.WriteLine(pro);           
} 

 

输出:   

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

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

 

foreach (MethodInfo method in t.GetMethods())           
{               
Console.WriteLine(method);           
} 

 

输出: 

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

 

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

代码:



 
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方法中不需传参数           
                }
            }

抱歉!评论已关闭.