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);

}

 

 

输出:   

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

}



}


 

posted @ 2010-08-24 22:40  泪的诺言lni  阅读(399)  评论(0编辑  收藏  举报