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方法来动态调用方法。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.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方法中不需传参数
}
}